例:
H
class MyClass {
int x,y,z;
public:
MyClass(int,int,int);
void X();
void Y();
void Z();
};
Run Code Online (Sandbox Code Playgroud)
CPP
class MyClass {
int x,y,z;
public:
MyClass(int x,int y,int z) {
this->x=x;
this->y=y;
this->z=z;
}
void X() {
printf("x = %d;\n",x);
}
void Y() {
printf("y = %d;\n",y);
}
void Z() {
printf("z = %d;\n",z);
}
};
Run Code Online (Sandbox Code Playgroud)
使它像C#一样.不要包含标题,在CPP中重新声明类,但使用方法体.当文件包含标题时,他从CPP获取extern字段\方法等.
这是合法的吗?我无法预测它的问题.有?
Luc*_*ton 11
这属于一元定义规则的范畴.特别是,针对同一个类的单个程序的多个TU上的多个定义的要求是:
[...] - D的每个定义应由相同的令牌序列组成[...]
(3.2定义规则[basic.def.odr]第5段)
因此,即使您"修复"第一个版本以声明成员函数inline与第二个版本匹配(其中提供成员的定义隐式声明它们inline),您仍然会违反此规则:函数体是出现在其中的其他标记一个但不在另一个.
3.2/5的一个定义规则部分不允许这样做.
类类型可以有多个定义(第9节),...... [其他类型和条件无关紧要]
......并且定义满足以下要求.鉴于这样一个名为D的实体在多个翻译单元中定义,那么
- D的每个定义应由相同的令牌序列组成;
如果标题包含在任何其他链接的翻译单元中,则这明显禁止这种机制.
如果你想编写C#,只需用C#编写即可.如果您编写惯用的C++而不是方言,您的未来维护者将非常感激.