компилятор не принимает класс агента - PullRequest
0 голосов
/ 18 ноября 2009

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

Agent theAgent(void);
int m = theAgent.loadSAG();

и это agent.h, который я включил в _tmain:

#ifndef AGENT_H
#define AGENT_H
class Agent {
public:
Agent(void);
int loadSAG(void);
~Agent(void);
};
#endif

и соответствующая функция agent.cpp:

int Agent::loadSAG(void) {
return 3;
}

так почему в мире я получаю эту ошибку: ошибка C2228: слева от '.loadSAG' должен быть класс / структура / объединение?

Заранее спасибо.

Ответы [ 6 ]

7 голосов
/ 18 ноября 2009
Agent theAgent(void);

Это объявление функции, просто измените его на:

Agent theAgent;
4 голосов
/ 18 ноября 2009

Компилятор думает

Agent theAgent(void);

Это объявление функции.

Agent theAgent;
3 голосов
/ 18 ноября 2009

Линия

Agent theAgent(void);

Фактически рассматривается компилятором как объявление функции theAgent, которая не принимает аргументов и возвращает агента.

Это объясняется в C ++ FAQ Lite .

Чтобы вызвать конструктор по умолчанию и настроить объект типа Agent (в отличие от приведенного выше оператора, который интерпретируется как объявление функции), вы можете просто объявить theAgent без использования скобок, как в:

Agent theAgent;

Все обычные вызовы участников, такие как loadSAG, будут работать, как и ожидалось, после этого момента.

В качестве альтернативы, если у вас должен быть объект в куче, используйте вместо этого:

Agent* theAgent = new Agent();  // Notice the *
theAgent->loadSAG();            // Use -> instead of .

// The code where theAgent is used

delete theAgent;  // This frees the memory allocated by new
1 голос
/ 18 ноября 2009

При вызове конструктора по умолчанию (без параметров) вы делаете это без '()'. То есть. Попробуйте создать объект агента:

Agent theAgent;
1 голос
/ 18 ноября 2009

Если по Agent theAgent(void); Вы имели в виду объявление функции, тогда вы, вероятно, забыли добавить () к вызову функции

int m = theAgent().loadSAG();

Если вы хотите определить переменную с именем theAgent, тогда вы добавили дополнительно (void). и вместо этого вы должны написать

Agent theAgent;

0 голосов
/ 18 ноября 2009

1001 * попробовать *

Agent theAgent = new Agent();
theAgent.loadSAG();

Сообщение об ошибке выглядит так, как будто вы никогда не создавали объект Agent до того, как пытались его использовать.

...