即使包含警卫,也可以进行多重定义

时间:2012-11-06 20:21:29

标签: c++

我第一次完成了需要面向对象程序的任务。我开始研究(相当大而复杂)的项目,并且在链接多个类文件及其相关的.h文件时遇到了一些障碍。基本上我一直得到“类的多重定义”错误,即使我有我的包括警卫而没有全局变量。我不会发布我的代码本身,但这是一个简单的例子,给我一个相同的错误:

//Runner file.
#include "Class1.cpp"
int main(){
    Class1 classtest();
    return 0;
}

-

//Class1.h
#ifndef CLASS1_H
#define CLASS1_H
class Class1
{
    public:
        Class1();
};
#endif // CLASS1_H

-

//Class1.cpp
#include "Class1.h"
#include <iostream>
#include "Class2.cpp"
using namespace std;
Class1::Class1()
{ 
    cout << "Created Test Class1";
    Class2 testClass();
}

然后几乎相同的Class2文件

//Class2.h
#ifndef CLASS2_H
#define CLASS2_H
class Class2
{
    public:
        Class2();
};
#endif // CLASS2_H

-

#include "Class2.h"
#include <iostream>
using namespace std;

Class2::Class2()
{
    cout << "Created Class 2";
}

然后整个事情产生大约1.4公尺的错误,其中大部分是以下格式: obj\Debug\Runner.o||In function的Class2' :| C:\用户\拾音\桌面\ C ++ \ ObjectOTesting \ Class2.cpp | 6 |     Class2::Class2()'| obj\Debug\Class2.o:C:\Users\MikeD\Desktop\C++\ObjectOTesting\Class2.cpp|6|first defined here|

的多重定义

我知道我在这里做了一些愚蠢的事情,但我还没弄清楚到底是什么。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:2)

你没有#include CPP文件 - 你编译它们。 CPP文件又是#include H个文件。