我确定之前已经问过这个问题,但我似乎无法找到它。
我有两个课程,Vector
和Point
。
文件是这样的(有点重复):
vector.h
:
#include <math.h>
#include <stdlib.h>
class Vector {
friend class Point;
public:
...
Vector(Point); // Line 16
vector.cpp
:
#include <math.h>
#include <stdlib.h>
#include "vector.h"
...
Vector::Vector(Point point) { // Line 29
x = point.x;
y = point.y;
z = point.z;
}
point.cpp
和point.h
看起来大致相同,只是您在定义中将vector
与point
交换。
我将它们包括在内:
#include "structures/vector.cpp"
#include "structures/point.cpp"
编译时,我收到此错误:
structures/vector.h:16:17: error: field ‘Point’ has incomplete type
structures/vector.cpp:29:15: error: expected constructor, destructor, or type conversion before ‘(’ token
我认为此错误表明Point
尚未声明,但当我通过导入vector.h
在point.cpp
内声明它时,我得到巨大的< / em>一堆错误。
有人能解释一下这个问题吗?
谢谢!
在应用@ ildjarn的建议后,这些错误消失了,我只剩下这一个:
structures/vector.h:16:18: error: expected ‘)’ before ‘const’
这一行:
Vector(Point const);
我在.cpp
文件中定义它:
Vector::Vector(Point const &point) {
答案 0 :(得分:5)
#include "point.h"
和(推测)point.cpp需要#include "vector.h"
。Vector
的构造函数按值Point
取值,所以它的大小必须是已知的;更改Vector
的构造函数,以取代Point
const
引用,前向声明仍然足够。#pragma once
,如果您不介意不是100%可移植的话。)编辑(响应OP的编辑):
您的声明和定义现在不匹配 - 即您的定义是正确的,但您的声明需要Point const&
,而不仅仅是Point const
。