请你帮我知道如何避免这个错误.. 提前谢谢。
文件名:point.hh
#ifndef POINT_H
#define POINT_H
class Point{
private:
int x;
int y;
public:
Point();
};
#endif
文件名:point.cc
#include "point.hh"
#include <iostream>
using namespace std;
Point::Point()
{
x=0;
y=0;
cout<<"x="<<x;
cout<<"y="<<y;
}
文件名:main.cc
#include"point.cc"
int main()
{
Point p; // calls our default constructor
}
答案 0 :(得分:16)
您必须在main.cc
文件中包含头文件,而不是源文件才能使用Point
类。
即,替换:
#include"point.cc"
人:
#include"point.hh"
这背后的基本原理是,除非标记为inline
,否则函数定义必须遵守 ODR (“一个定义规则”)。通过将源文件包含在其他源文件中,您最终会在两个不同的翻译单元中对Point::Point()
函数进行两个(相同的)定义。
当链接过程发生时,它会看到这两个定义并抱怨:这就是你得到的错误。
答案 1 :(得分:2)
另一个原因是build命令,如果你有两次列出相同的.cpp文件,你肯定会得到这个错误,它会说你甚至没有写的函数都有错误。
将来可能会帮助某人。