C++ 在.cpp文件中,使用“定义方法”;类Foo{void method(){}&引用;而不是",;void Foo::method(){}";?

C++ 在.cpp文件中,使用“定义方法”;类Foo{void method(){}&引用;而不是",;void Foo::method(){}";?,c++,C++,当您在头文件中有函数的内联定义,并且希望将函数定义体从头文件移出并移动到.cpp文件中时,您不能只剪切和粘贴头文件中定义的函数;您必须从以下内容转换语法: class Foo { void method1() { definition(); } void method2() { definition(); } void method3() { definition(); } }; 为此: void Foo::method1() { definition(); } void Foo::metho

当您在头文件中有函数的内联定义,并且希望将函数定义体从头文件移出并移动到.cpp文件中时,您不能只剪切和粘贴头文件中定义的函数;您必须从以下内容转换语法:

class Foo
{
void method1() { definition(); }
void method2() { definition(); }
void method3() { definition(); }
};
为此:

void Foo::method1() { definition(); }
void Foo::method2() { definition(); }
void Foo::method3() { definition(); }
编辑:我只是想指出,我希望避免的是必须在每个方法名称前面键入类名。这似乎是一件小事,但当您将大量函数定义从头文件移到cpp文件中时,它会累加起来。当返回类型特别复杂时,您必须找到每一个返回类型在哪一行结束,每一个方法名称在哪一行开始

所以我的问题是,我必须像上面的第二段代码那样做吗?如果我这样做(以下标准符合C++):

在Foo.h中:

class Foo
{
void method1();
void method2();
void method3();
};
在Foo.cpp中:

#include "Foo.hpp"    
class Foo
{
void method1() { definition(); }
void method2() { definition(); }
void method3() { definition(); }
};

不,我认为这违反了一个定义规则。无论如何,这是不允许的。请记住,
#include
并不是真正由编译器看到的。include是在源代码馈送到编译器之前处理的,因此编译器看到的是:

#line "foo.cpp" 1
#line "foo.h" 1
class Foo {
    void method1();
    ...
};

#line "foo.cpp" 3
class Foo {
    void method1() {...}
};

因此,它看起来像是同一符号的两个相互冲突的定义。

这不起作用:编译器将在您重新定义类时看到这一点。恐怕没办法,这是语言的一部分


(PS:我知道这些工作都是乏味的,但我们都必须在一个或多个时间内做这些工作。如果是一个大的工作,你可以看写一个脚本来为你做,但它确实是一个大的工作来证明努力,分析C++是不好玩的)< /P> < P>是的,你必须做到这一点,正如你在顶部显示(你的原始代码),我不认为有什么懒散的方法可以解决这个问题。

您可以将类名放在原始定义中。这总是有效的。不幸的是,对于内联,如果将它放入cpp文件中,通常不再真正内联,除非它非常简单或使用编译器指令

但是,如果它足够大,以至于大多数时候都想进入cpp,那么您不希望它内联


另一件事是考虑“助手”类。在其他地方定义那个些,它们做了很多实现细节。然后您可以在派生类中调用它,它将被内联。

“我知道,我将使用正则表达式!”,然后我遇到了两个问题!”