Я создал функциональную программу ООП, которая использует кучу классов, и получаю кучу ошибок, которые не имеют смысла. Я работаю над проектом Windows VC ++ 2008, и в начале я пытался иметь другую реализацию и заголовочные файлы. когда я пытался, например, сделать
object1.cpp
#ifndef Object1_cpp
#define Object1_cpp
#include "Object1.h"
Object1::Object1(){
...
}
Object1::~Object1(){
...
}
....
#endif
object1.h
#ifndef Object1_H
#define Object1_h
class Object1{
public: Object1();
public: ~Object1(); // line 39 of object1.h
...
};
#endif
main.cpp
#include "object1.cpp"
иногда это возвращает ошибки
1>c:...\object1.h(39) : error C2059: syntax error : '('
1>c:...\object1.h(39) : error C2238: unexpected token(s) preceding ';'
и поскольку он не жалуется на конструктор, единственное, что приходит на ум, это '~', указывающее деструктор. когда я убираю .h из картинки, меняя .cpp на
#ifndef Object1_H
#define Object1_h
class Object1{
public: Object1::Object1();
public: Object1::~Object1();
...
};
#endif
или
#ifndef Object1_H
#define Object1_h
class Object1{
public: Object1();
public: ~Object1();
...
};
#endif
хорошо компилируется. Я не понимаю это когда я делал что-то подобное в прошлом на других компиляторах, это прекрасно работает, но не здесь.
в настоящее время программа полностью функциональна, хотя я игнорирую существование файлов .h и делаю все в файлах .cpp. похоже, что компилятор создает проблему с оператором Til-de, обозначающим деструктор. это только один из примеров проблемы, которая возникает во всех моих классах, когда я пытаюсь разделить реализацию и пересылать ссылки.
найдено решение. очевидно, один из моих товарищей по команде использовал один и тот же #define в одном из своих файлов (потому что это имело смысл, но не являлось именем файла, как требовалось соглашение)