VS2010中的链接器错误(解决方案中的2个项目和静态方法)

时间:2013-06-08 20:14:48

标签: c++ linker linker-errors static-methods

我遇到错误LNK2019和LNK1120的问题。

我有两个项目的解决方案。在第一个程序中我有我的程序,在第二个项目中我有测试文件。

在第二个项目中,我可以包含头文件(带有类)。我可以使用内联方法。但是......我在头文件中定义了静态私有方法,并在.cpp文件中实现。 如果我想测试使用这种静态私有方法的公共内联方法,我有LNK2019错误和致命错误LNK1120。

我不知道该怎么办......这对我来说很好,因为我可以在第一个项目中使用它而没有任何错误......

看看例子...... 解决方案:

PROJECT1:

// example.h
class Example {
public:
    void method() { static_method(); };
private:
    static void static_method();
};

// example.cpp
void Example::static_method() { /* implementation */ }

// main.cpp
void main()
{
    Example e;
    e.method();    // it works!
}

但是...

PROJECT2(在解决方案中):

// test.cpp
void main()
{
    Example e;
    e.method(); // it doesn't work (but if I add implementation of
                // Example::static_method() to header file example.h - it's OK)
}
你能帮助我吗? [VS2010]

感谢。

2 个答案:

答案 0 :(得分:1)

希望proj1是一个静态库,proj2是exe或dll。在这种情况下,您必须将proj1的引用添加到proj2,它将正常工作。 (非常顶部的共同属性/框架和引用;添加新引用)。

如果两个项目都是exe,那么你必须拆分一个带有example实现的库,剩下的就是其余的,然后在两个项目中引用lib。

你也可以把它变成一个DLL而不是静态的lib,但是你必须使用正确的导出内容,并确保在单个目录中生成文件以供执行。

答案 1 :(得分:0)

尝试在.h文件中实现静态方法,如:

// example.h
class Example {
public:
    void method1() { static_method(); };
private:
    static void static_method() { // implementation }
};

// example.cpp
/* nothing here yet... */

// main.cpp
void main()
{
    Example e;
    e.method1();    // it works!
}