编写一个简单的c ++程序并感到困惑....
有4个班级,2个对这个错误很重要......
第13行收到错误消息“字段'点'具有不完整类型”和“预期”;' befor'('token'在同一行
错误似乎从Vector3.cpp开始,其中只包含Vector3.h和空方法
在Normal3标题中删除了包含“Vector3.h”,认为它将在一个圆圈中运行......不太好......
一些想法?希望如此:)和ty的答案以下是我的两个重要课程:
#ifndef NORMAL3_H
#define NORMAL3_H
class Normal3 {
public:
double x, y, z;
Normal3 mul(Normal3 n);
Normal3 add(Normal3 n);
Normal3 dot(Vector3 v); //Line 13
Normal3(double x = 0, double y = 0, double z = 0)
: x(x), y(y), z(z)
{ }
};
#endif //NORMAL3_H
AAAAAAAAAAAAAAAAAAAAAND
#ifndef VECTOR3_H
#define VECTOR3_H
#include "Normal3.h"
class Vector3 {
public:
double x, y, z, magnitude;
Vector3 add(Vector3 v);
Vector3 add(Normal3 n);
Vector3 sub(Normal3 n);
Vector3 mul(double c);
double dot(Vector3 c);
double dot(Normal3 n);
Vector3 normalized();
Normal3 asNormal();
Vector3 refelctedOn(Normal3 n);
Vector3(double x = 0, double y = 0, double z = 0, double m = 0)
: x(x), y(y), z(z), magnitude(m)
{ }
};
#endif //VECTOR3_H
答案 0 :(得分:3)
这只是意味着编译器不知道那时Vector3
是什么。如果您事先声明,错误将消失:
#ifndef NORMAL3_H
#define NORMAL3_H
class Vector3; // Add this line
class Normal3 {
// ...
};
更新:正如john在他的评论中所说的那样,用另一个前向声明#include "Normal3.h"
替换Vector3.h中的class Normal3;
将是一个很好的改进:
#ifndef VECTOR3_H
#define VECTOR3_H
class Normal3; // instead of #include "Normal3.h"
class Vector3 {
// ...
};
您应该尽量将标头中的#include
指令保持在最低限度,以避免过多的编译依赖性。如果它定义了您正在使用的类型,则只需要包含标题(通常因为您定义的类具有此类型的数据成员)。如果您只使用指针或对该类型的类型或函数参数的引用(如您的示例所示),则前向声明就足够了。
答案 1 :(得分:0)
您的文件normal3.h
对Vector3
一无所知。
我发现Vector3 v
没有变成dot
,那么你应该写:
代替Normal3 dot(Vector3 v); //Line 13
作为
#ifndef NORMAL3_H
#define NORMAL3_H
class Vector3;
class Normal3 {
public:
double x, y, z;
Normal3 mul(Normal3 n);
Normal3 add(Normal3 n);
Normal3 dot(const Vector3 &v); //Line 13
Normal3(double x = 0, double y = 0, double z = 0)
: x(x), y(y), z(z)
{ }
};
#endif //NORMAL3_H