1

クラス ファイルから関数を実行しようとしていますが、機能せず、次のエラー メッセージが表示されます: error LNK1120: 1 unresolved externals

エラー LNK2019: 未解決の外部シンボル "public: void __thiscall NS::Class1::test(void)" (?test@Class1@NS@@QAEXXZ) が関数 _main で参照されています

//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 に答える