0

複数のプロジェクトを含むビジュアル スタジオ ソリューションがあります。そのうちの 1 つ、「MyProject」はスタティック ライブラリ (.lib) です。プロジェクトには、他の多くのクラスの中でも、「A」と「B」の 2 つのクラスがあります。

あ:

#pragma once

class A
{
public:
    void foo();
};

A.cpp:

#include A.h

void A::foo(){
        //do something
}

Bh:

#pragma once

class B
{
public:
    void bar();
};

B.cpp:

#include B.h
#include A.h

void B::bar(){
        A a;
        a.foo();
}

コンパイル エラーがなければ、リンケージ エラーが発生します。

OtherProject.lib(B.obj) : エラー LNK2019: 未解決の外部シンボル "public: void __thiscall A::foo(void)" (?foo@A@@QAE_NXZ) 関数で参照されている "public: void __thiscall B::bar( void)" (?bar@B@@QAEXXZ)

すべてがうまくいっているようです。A.cpp のコンパイル プロセスが表示されます。プロジェクト「MyProject」のみをビルドまたはリンクしても問題ありません。しかし、ソリューション全体を構築しようとすると、エラーが発生します。

ありがとう!

4

3 に答える 3

1

OtherProjectclass を含み、そのBfunction を使用する別のプロジェクトがあることがわかりましたbar()。私はエラーを十分に読んでおらず、別のプロジェクトでリンク エラーが発生していることに気付きませんでした。私がしなければならなかったのは、に含めることだけA.cppですOtherProject

于 2013-03-24T08:16:56.900 に答える
0

このメソッドの実装は、A.cpp でコメント アウトされています。

void A::foo(){
        //do something
}

またはA.cpp、プロジェクトのビルドに含まれていません。ソリューション エクスプローラーで A.cpp を右クリックし、[プロパティ] を選択して、ビルドから除外されているかどうかを確認します。ビルドすると、次のように表示されますか?

1>Compiling...
1>A.cpp

このコードを Visual Studio に入力したところ、問題なく動作しました。

于 2013-03-22T22:41:36.310 に答える