G++删除了无用的功能?未定义的引用

g++ removes useless function? Undefined reference

本文关键字:未定义 引用 功能 G++ 无用 删除      更新时间:2023-10-16

我有带有声明的hpp文件:

namespace X {
    class Y {
        public:
          [other functions]
          inline float basicFunction();
          int someFunction();
        [other functions]
    };
}

在 cpp 文件中:

namespace X { 
    [implementations etc.]
    inline float Y::basicFunction() {
        return someValue * someMath / moreMath;
    }
    int Y::someFunction() {
        return basicFunction() * 100;
    }
    [other functions]
}

我正在其他 cpp 文件中使用它,但我认为这不是问题。编译方式:

g++ -c someclass.cpp -o someclass.o -std=c++11
g++ -c main.cpp -o main.o -std=c++11
g++ main.o someclass.o -o main -std=c++11 -O0

抛出错误:

main.o: In function `main':
    main.cpp:(.text+0x4d9): undefined reference to `X::Y::someFunction()'

为什么?我怎样才能正确编译它?
我知道someFunction()是没有用的,但这被叫了很多次,我就是喜欢这样。

上面的所有代码都不是真实的,所以可能有错误,但在我的程序上它(我认为)是正确的

我尝试了许多组合(两个函数具有相同的返回类型,都是内联的,没有内联等)都没有效果。

已解决。函数不能是内联的。

仍然不知道为什么在内联删除后经过几次尝试后它起作用,但没关系。

解释为什么此代码中的函数不能内联很简单。编译器在看到"内联"时,不要创建指向函数的指针,而是将代码粘贴到引用的位置。

只是我的错误...