0

我用这样的类写了一个共享库:

// lib.h
class LibClass {
    template<typename T>
    static void foo () {
        T *tmp = new T();
        tmp->bar();
    }
};

我在其他地方使用了 lib 并定义了类:

//client.cpp
class C {
public:
    void bar() { cout<<"bar"<<endl; }
};

int main () {
    LibClass::foo<C>();
    return 0;
}

我得到了错误undefined reference to 'C::bar()'

4

1 回答 1

1

我强烈怀疑您正在使用 *nix 链接器,并且您列出了目标文件(到编译器/链接为client.o然后lib.so. 但不幸的是,当链接器看到 client.o 它已经可以看到没有引用C::bar并且没有为它发出任何代码。

您需要在链接命令行上的库之前之后使用对象组或列出client.o两次。

于 2013-04-24T03:53:48.473 回答