如何初始化typedef struct PType2 {
double x, y;
PType2() : x(0), y(0) {}
PType2(const PType3 & ptype3) : x(ptype3.x), y(ptype3.y) {} //Abort ptype3.z to create a two-dimensional point
PType2(double xy) : x(xy), y(xy) {}
PType2(double x, double y) : x(x), y(y) {}
} ptype2;
以复制error C2065: 'ptype3' : undeclared identifier
error C2143: syntax error : missing ',' before '&'
error C2228: left of '.a' must have class/struct/union
error C2228: left of '.b' must have class/struct/union
error C2664: 'PType2::PType2(const PType2 &)' : cannot convert argument 1 from 'ptype3' to 'const int'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
结构(类型转换)?
typedef struct
输出:
ptype2(double x, double y)
我有两个ptype3(double x, double y, double z)
,{{1}}和{{1}}。
赋值运算符重载可以解决问题吗?
答案 0 :(得分:1)
编译器找不到PType3。这里的前向声明是不够的,因为您想要访问PType2中PType3的成员。
但是,您可以在定义PType3之后实现构造函数,然后前向声明就可以了。
struct PType3;
struct PType2 {
double x, y;
PType2() : x(0), y(0) {}
PType2(const PType3 & ptype3);
PType2(double xy) : x(xy), y(xy) {}
PType2(double x, double y) : x(x), y(y) {}
};
struct PType3 {
double x, y;
PType3() : x(0), y(0) {}
PType3(const PType2 & ptype2) : x(ptype2.x), y(ptype2.y) {}
PType3(double xy) : x(xy), y(xy) {}
PType3(double x, double y) : x(x), y(y) {}
};
在cpp:
PType2::PType2(const PType3 & ptype3) : x(ptype3.x), y.(ptype3.y) {};
答案 1 :(得分:1)
复制构造函数的签名是:
T( const&T t );
你的代码中没有它。
如果您想使用PType2
构建PType3
,则必须在PType3
之前定义PType2
。
答案 2 :(得分:0)
首先,PType2(const PType3 & ptype3)
并未正式称为复制构造函数。从C ++的角度来看,它是PType2(const PType2 &)
。
我认为您缺少的是包含定义类PType3的头文件。
说过你提供的错误并不完全符合代码。在粘贴到stackoverflow之前是否修改了代码?
答案 3 :(得分:0)
通常情况下,我建议您阅读错误消息,但在这种情况下,它们会让您感到有些困惑。我想问题是你没有在PType3
之前定义PType2
,它实际上必须在你试图访问它的成员时完全定义(所以一个简单的前向声明不会做)
错误消息似乎来自支持默认为int
的编译器。第一个错误是在这种情况下,因为编译器看到PType3
并且因为它尚未声明它不是一个类型所以编译器假定它应该默认为int
所以它认为{{1}是你的参数名称。然后它会混淆并使用户感到困惑(通过使用非直观的错误排序)。