C++ 多次执行成员功能

C++ 多次执行成员功能,c++,C++,例如,您有这样的情况: 1) 包含某些成员函数(def.h)的类定义的头文件 2) 该标头包含在.cpp文件中,其名称与驻留在单独文件夹中的名称相同 3) 该.cpp文件从def.h执行相同的函数,但方式不同 3) 然后,我们通过多次执行将该头包含到一些main.cpp和call函数中,并编译整个项目 问题:它会编译没有错误吗?将选择什么功能实现 在两个不同的位置定义函数违反了 odr使用的每个非内联函数或变量(见下文)的一个且只有一个定义需要出现在整个程序中(包括任何标准库和用户定义库)编译器

例如,您有这样的情况:

1) 包含某些成员函数(def.h)的类定义的头文件

2) 该标头包含在.cpp文件中,其名称与驻留在单独文件夹中的名称相同

3) 该.cpp文件从def.h执行相同的函数,但方式不同

3) 然后,我们通过多次执行将该头包含到一些main.cpp和call函数中,并编译整个项目


问题:它会编译没有错误吗?将选择什么功能实现

在两个不同的位置定义函数违反了

odr使用的每个非内联函数或变量(见下文)的一个且只有一个定义需要出现在整个程序中(包括任何标准库和用户定义库)编译器不需要诊断此冲突,但违反此冲突的程序的行为未定义。

要有明确的行为,您应该:

  • 只链接最终程序中的一个定义
  • 改用
  • 改用多态性/继承

在两个不同的位置定义函数

odr使用的每个非内联函数或变量(见下文)的一个且只有一个定义需要出现在整个程序中(包括任何标准库和用户定义库)编译器不需要诊断此冲突,但违反此冲突的程序的行为未定义。

要有明确的行为,您应该:

  • 只链接最终程序中的一个定义
  • 改用
  • 改用多态性/继承

你把它标记为C++,它是一个标准的C函数还是一个类的函数/方法?@ SPlatten没关系。which@SPlatten所谓“成员函数”,是指一种类的方法。因为不确定,所以,对于一种科学方法,MFNX C++是不可替代的。behaviour@mfnx那样做了。它取决于编译器(链接器)。他们中的一些人给出错误并拒绝启动程序。有些很好用。那么编译器中的一个性能好吗?你把它标记为C++,是标准的C函数还是类的函数/方法?@ SPlatten没关系。which@SPlatten所谓“成员函数”,是指一种类的方法。因为不确定,所以,对于一种科学方法,MFNX C++是不可替代的。behaviour@mfnx那样做了。它取决于编译器(链接器)。他们中的一些人给出错误并拒绝启动程序。有些很好用。那么,编译器中的一个是否运行良好?因此,这是有效的,不会导致编译或链接错误吗?@奥列格,它是无效的,但不需要引起编译或链接错误。@奥列格C++不要求或禁止任何这种情况下。它可以建造,也可以建造失败。如果它构建了你的整个程序,你就可以在上面做不同的事情tuesdays@oleg你要做的就是模板的作用。不管定义是在什么文件中,一个函数只有一个定义是合法的,不管是否有成员。模板的不同实例的成员函数将有不同的定义。因此,这是有效的,不会导致编译或链接错误吗?@奥列格无效,但不需要引起编译或链接错误。@奥列格C++不要求或禁止在此情况下的任何内容。它可以建造,也可以建造失败。如果它构建了你的整个程序,你就可以在上面做不同的事情tuesdays@oleg你要做的就是模板的作用。不管定义是在什么文件中,一个函数只有一个定义是合法的,不管是否有成员。但不同模板实例的成员函数将有不同的定义。