-1

我有带有声明的 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()是没用的,但这被多次调用,我就是喜欢这样。

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

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

4

1 回答 1

0

解决了。函数不能内联。

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

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

只是我的错...

于 2013-11-13T01:05:09.057 回答