1

我正在尝试从类文件运行一个函数,但它不起作用,并且我收到以下错误消息:error LNK1120: 1 unresolved externals

错误 LNK2019:函数 _main 中引用的未解析的外部符号“public:void __thiscall NS::Class1::test(void)”(?test@Class1@NS@@QAEXXZ)

//Main.cpp

#include<iostream>
#include<string>
#include<Windows.h>
#include "Class1.h"

int main(){
    NS::Class1 E;
    E.test();
    return 0;
};


//Class1.cpp

#include <Windows.h>
#include <string>
namespace NS{
class Class1{
        Class1(){
            OutputDebugString(L"Created.");
        }

        void test(){
            OutputDebugString(L"Hello World");
        }
    };
}


//Class1.h

#ifndef _Class1_H_
#define _Class1_H_
namespace NS{
    class Class1{
        public:
            void test();
        };
}
#endif
4

3 回答 3

6

在您的源文件中,您正在重新定义类,而不是定义其成员函数。这将给出未定义的行为,因为您只被允许定义一次类。源文件应该看起来更像:

#include "Class1.h"
#include <Windows.h>

NS::Class1::Class1(){
    OutputDebugString(L"Created.");
}

void NS::Class1::test(){
    OutputDebugString(L"Hello World");
}

您还需要修改标头中的类定义,因为它没有声明构造函数。

此外,请确保您的项目正在编译和链接两个源文件。

于 2013-10-10T15:53:01.580 回答
1

您的头文件包含包含保护的保留 ID,并且缺少构造函数的声明。它应该如下所示:

#ifndef CLASS1_H
#define CLASS1_H

namespace NS {

class Class1
{
public:
    Class1();
    void test();
};

}
#endif

类的定义不应该包含class声明,它应该包含include它,并且应该看起来更像这样:

#include <Windows.h>

#include "Class1.h"

namespace NS {

Class1::Class1()
{
    OutputDebugString(L"Created.");
}

void Class1::test()
{
    OutputDebugString(L"Hello World");
}

}
于 2013-10-10T16:03:58.370 回答
0

我认为您的 .cpp 文件可能会导致问题。由于您已经使用类成员声明在头文件中创建了类定义,因此只需在 Class1.cpp 文件中导入 Class1.h 头文件并确定成员函数的范围,然后定义它们的行为。

所以也许尝试:

#include <Class1.h>

NS::Class1::Class1(){}//constructor

void NS::Class1::test(std::cout << "hi"){}
于 2013-10-10T16:08:34.707 回答