jvp*_*nis 6 c++ class definition member-functions
我目前在 Foo.h 中定义了两个未命名的类:
class Foo {
public:
Foo();
class {
private:
int x;
int y;
public:
int GetX() { return x; }
int GetY() { return y; }
} Sub1;
class {
private:
int x;
public:
int GetX() { return x; }
} Sub2;
}
Run Code Online (Sandbox Code Playgroud)
这段代码编译得很好,它是这样使用的:
Foo temp;
int Ax, Ay, Bx;
Ax = temp.Sub1.GetX();
Ay = temp.Sub1.GetY();
Bx = temp.Sub2.GetX();
Run Code Online (Sandbox Code Playgroud)
但是,现在我想将成员函数定义移动到源文件中。我知道将此类拆分为头文件和源文件的唯一方法是命名这些类:
福.h:
class Foo {
private:
class A {
private:
int x;
int y;
public:
int GetX();
int GetY();
};
class B {
private:
int x;
public:
int GetX();
};
public:
Foo();
A Sub1;
B Sub2;
}
Run Code Online (Sandbox Code Playgroud)
文件.cpp:
int Foo::A::GetX() { return x; }
int Foo::A::GetY() { return y; }
int Foo::B::GetX() { return x; }
Run Code Online (Sandbox Code Playgroud)
然而,这段代码不是我想要的,因为它很丑,而且我一开始并不想要一个命名类。
是否可以将类拆分为头文件和源文件?或者这只是糟糕的代码设计?
不幸的是,这是不可能的。\xc2\xa79.3/5:
\n\n\n\n\n如果成员函数的定义在词法上位于其类定义之外,则应使用运算符通过其类名来限定成员函数名称
\n::。
由于不存在类名,因此不可能对成员函数进行类外定义。GCC 在这种情况下允许 decltype-specifiers 的事实是一个错误。
\n