C++重定义 - 头文件
我是一个完整的初学者在C++和什么可能看起来愚蠢显而易见你我只是无法让我的头。C++重定义 - 头文件
Testapp.h
#ifndef TESTAPP_H
#define TESTAPP_H
using namespace std;
class Testapp {
private:
public:
Testapp() { };
};
#endif
的main.cpp
#include <cstdlib>
#include <iostream>
#include "Testapp.h"
Testapp::Testapp(){
}
int main(int argc, char *argv[])
{
system("PAUSE");
return EXIT_SUCCESS;
}
错误消息:Redefinition of 'Testapp::Testapp()'
在猜测它的定义两次构造函数中,如何克服虽然这个我不知道。我正在使用DEV-C++。
一个函数的声明也当它给出实现或bo时的定义dy的函数。您的类定义看起来像这样的构造函数的定义:
Testapp() { };
它的机身是{ }
并且是空的。然后,你必须在你的main.cpp
文件中的另一个定义,看起来像这样:
Testapp::Testapp(){
}
同样,这个函数的定义有一个空的机构。仅仅因为函数的实现完全一样,并不意味着它没问题。在一个定义规则下,你不能有多个函数定义。一个简单的办法是使一个类定义只有一个声明通过不提供身体:
Testapp();
或者,你可以只得到main.cpp
完全摆脱定义。究竟你最终做什么取决于你想如何布置你的代码。一个典型的方法是将具有包含类定义和成员函数声明,Testapp.h
头文件:
#ifndef TESTAPP_H
#define TESTAPP_H
using namespace std;
class Testapp {
private:
public:
Testapp(); // Just a declaration
};
#endif
然后,在这个类,Testapp.cpp
实现文件,给成员函数定义:
#include "Testapp.h"
Testapp::Testapp() { }
然后在main.cpp
,只是包含头文件,并用它定义了类:
#include "Testapp.h"
int main(int argc, char *argv[])
{
Testapp test;
return 0;
}
我建议从头文件中删除using namespace std;
。即使在源文件中污染你的全局命名空间也被认为是非常糟糕的做法,但是如果你在头文件中这样做,这会变得具有传染性。
你已经在你的类声明中定义Testapp::Testapp
Testapp() { };
你需要或者删除
Testapp::Testapp(){
}
或更改构造函数定义声明
Testapp();
它确实定义了两次 - 一次在Testapp.h中,一次在main.cpp中,只删除其中一个。
在你的头文件,你只需要编写一个函数 “存根”,或function prototype:
class Testapp {
private:
public:
Testapp();
};
你需要学习在C++ difference between function declarations (prototypes) and function definitions。
谢谢你,解决了我的其他程序中几乎所有的错误。很好解释 - 现在我的主程序中只剩下一个错误! 对WinMain @ 16的未定义引用。 GRR! 我刚刚删除了你告诉我的身体。感谢命名空间的提示,我一定会考虑删除它。 – Zakerias 2013-04-22 12:26:33