Как odificar функция printmovie () таким образом что получил ссылкой суфлер тип void, что содержал структуру, которую было нужно печатать? [закрывшая]

!

Я нуждаюсь в том, чтобы изменить такую printmovie функцию как мастер на все руки на описание, любая помощь была бы хорошей!

0
задан 26.08.2019, 02:55
1 ответ

Сначала говорить тебе, что помещать изображение, чтобы показывать твой код не хороший метод здесь в этом сайте. Снова, скопируй код как текст, потому что он облегчает нас, когда остальные дают тебе решение твоей проблемы.

, Сказанные это, в которое мы идем: Я не понимаю хорошо, зачем тебе нужно, чтобы это был указатель в void. Если то, что ты хочешь, является указателем, костлявая, перемещать адрес памяти структуры вместо самой структуры из-за стоимости, как ты делал в твоем примере, ты был бы должен делать нечто похожее:

#include <iostream>
#include <string>
#include <sstream>

#define MAX_MOVIES 3

struct movies_t {
    std::string strNombre;
    int year;
}films[ MAX_MOVIES];


void printmovies( struct movies_t * lpElement);

int _tmain(int argc, _TCHAR* argv[])
{
    std::string myStr;

    for( int i = 0 ; i < MAX_MOVIES; i++) {
        std::cout << "Enter title: ";
        getline( std::cin, films[i].strNombre);
        std::cout << "Enter year: ";
        getline( std::cin, myStr);
        std::stringstream( myStr) >> films[ i].year;
    }

    std::cout << "You have entered this movies: " << std::endl;

    for( int n = 0; n < MAX_MOVIES; n++) {
        printmovies( &films[ n]);
    }

    return 0;
}

void printmovies( struct movies_t * lpElement) {
    if( lpElement) {
        std::cout << "Name: " << lpElement->strNombre.c_str() << ". Year: " << lpElement->year << std::endl;
    }
}

, Если все же это не стоит тебе, и ты хочешь действительно, чтобы указатель был void, ты был бы должен менять определение и осуществление функции printmovies для того, чтобы это оставалось так:

void printmovies( void* lpvoid);

Внутри функции ты должен делать cast в указатель в твою структуру, чтобы мочь снабжать ссылками Ваши внутренние члены:

void printmovies( void* lpvoid) {

    struct movies_t * lpElement = ( struct movies_t *) lpvoid;

Оставшаяся часть функции была бы равной.

И в призыве к функции ты должен делать cast твоего structura void*, меняя вызов из-за:

printmovies( (void*)&films[ i]);

, Но это не имеет никакого чувства и улучшает совсем не твою программу.

0
ответ дан 11.09.2019, 03:39