我创建了一个使用大量类的功能性OOP程序,我收到了一堆没有意义的错误。我正在开发一个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(因为它有意义,但不是文件的名称,因为需要约定)
答案 0 :(得分:2)
#ifndef/#define/#endif
仅在标题中有必要。#pragma once
进行防护。#include "object11.h"
答案 1 :(得分:2)
你的包裹警卫坏了:
#ifndef Object1_H
#define Object1_h
您在一端的_H
和另一端的_h
。这导致包含警卫无法工作。
此外,您不需要,也不要在您的实施文件中加入警卫。无论如何,它们永远不应被包括在内。
答案 2 :(得分:0)
错误是你在构造函数和析构函数声明中使用了作用域:
class Object1{
public: Object1::Object1();
// Here ^^^^^^^^^
在类(或结构)中,您不需要:
class Object1 {
public:
Object1();
~Object1();
};