1

これは、生きているすべての人間が完全に実行できる非常に基本的なことであると私は確信していますが、どういうわけか私にはうまくいきません. Google で見つけた FAQ や他の多くのスレッド/質問では、これは解決されませんでした。

状況は次のとおりです。1 つの Visual Studio 2010 プロジェクトがあります。このプロジェクトは、Visual Studio 2010 ソリューションにあります。プロジェクトには次のファイルがあります。

add.h:

class Adder {
public:
    static int add(int i1, int i2);
};

add.cpp:

class Adder {
public:
    static int add(int i1, int i2) {
        return i1 + i2;
    }
};

main.cpp:

#include "add.h"

int main() {
    Adder::add(5, 6);
    return 0;
}

このコードを実行しようとすると、かなり基本的なように見えますが、次のリンカ エラーが発生します。

main.obj : error LNK2019: unresolved external symbol "public: static int __cdecl Adder::add(int,int)" (?add@Adder@@SAHHH@Z) referenced in function _main

私が収集したものから、これはリンカが Adder::add() の実装を見つけられなかったことを意味します。ただし、ファイルはまったく同じプロジェクトにあり、生成された .obj ファイルはまったく同じフォルダーにあり、クラスとヘッダー ファイルについて読んだすべてのチュートリアルは、これが機能するはずだと教えてくれます。

これまでに、次の潜在的な解決策を試しました。

  • プロジェクト独自のフォルダーを追加の includes/dependencies/sources/whatevers に追加します
  • さまざまなものに extern 識別子を追加する
  • 別の名前空間を使用する
  • それらが機能することを期待して、他のさまざまな小さな調整

したがって、私の問題は次のように要約できると思います: リンカに add.cpp ファイルを認識させるにはどうすればよいですか? これは私にとって非常に基本的なことのように思えますが、これに数時間を費やしましたが、成功していません。

4

1 に答える 1

2

以下は、まったく新しいクラスを定義します

//add.cpp:
class Adder {
public:
    static int add(int i1, int i2) {
        return i1 + i2;
    }
};

ヘッダーにあるものとは異なり、この変換ユニット( "add.cpp")でのみ使用できます。

含まれるべきものは次のとおりです。

//add.cpp
#include "add.h"
int Adder::add(int i1, int i2) {
    return i1 + i2;
}

これは、ヘッダーからクラスで定義されたメソッドを実装しadd.hます。

于 2012-12-05T00:19:06.497 に答える