解决方法是将不可重载的非内联函数的定义放在一个单独的源文件中,并将该源文件编译成一个独立的目标文件,然后将该目标文件与其他需要使用该函数的源文件一起链接。
下面是一个示例:
示例.h文件:
#ifndef EXAMPLE_H
#define EXAMPLE_H
// 声明不可重载的非内联函数
void foo();
#endif
示例.cpp文件:
#include "示例.h"
#include
// 定义不可重载的非内联函数
void foo() {
std::cout << "Hello, world!" << std::endl;
}
main.cpp文件:
#include "示例.h"
int main() {
foo(); // 调用不可重载的非内联函数
return 0;
}
编译示例.cpp为示例目标文件:
g++ -c 示例.cpp -o 示例.o
编译main.cpp并链接示例目标文件:
g++ main.cpp 示例.o -o main
运行可执行文件:
./main
运行结果:
Hello, world!
通过将不可重载的非内联函数的定义放在一个单独的源文件中,并将其编译为独立的目标文件,可以解决不同的翻译单位中定义的问题。这样,可以在其他源文件中通过包含示例.h文件来使用这个函数,并在链接时将示例目标文件与其他源文件一起链接。
上一篇:不可重写的成员(这里指Login.getInfo)不能在设置/验证表达式中使用。
下一篇:不可转换的类型;无法将'android.content.Context'转换为'com.example.xxxxx.PendingListFragment'。