ページ 1 / 1
[c++]ライブラリファイル内の未解決外部シンボルについて
Posted: 2017年4月03日(月) 02:03
by purin52002
こんばんは、今回は大嫌いな未解決外部シンボルについて質問があります。
- staticなメンバ変数を持つクラス
- 1を継承したクラス
上の二つのようなクラスをライブラリ化しました。
これらは二つともビルドできたのですが、
これら二つを利用してプログラムを書くと"メンバ変数は未解決です"というエラーが出ます。
片方だけを利用するとビルドできるので、おそらくstaticメンバ変数が二重定義されている(同じソースファイルが二度読まれている)んじゃないかなとアタリをつけています。
、、、つけてるだけで確信はないのですが^^;
というわけで、今回の質問です。
- ソースファイル(というよりオブジェクトファイル?)を二重に読み込まないようにする方法はあるか?
- そもそもほかに解決方法があったりするのか?
よろしくお願いします<(_ _)>
Re: [c++]ライブラリファイル内の未解決外部シンボルについて
Posted: 2017年4月03日(月) 03:26
by かずま
purin52002 さんが書きました:これら二つを利用してプログラムを書くと"メンバ変数は未解決です"というエラーが出ます。
"メンバ変数は未解決”というエラーなら、
メンバ変数は二重定義どころか、一度も定義されていないということです。
エラーが出るというコードを見せてください。
試しに次のようなコードを書いてみましたが、エラーは出ません。
ab.h
コード:
#ifndef AB_H
#define AB_H
class A { // class A の宣言
public:
static int x; // staticメンバ変数の宣言
};
class B : public A { // class A を継承した class B の宣言
};
#endif // AB_H
ab.cpp
コード:
#include "ab.h"
int A::x = 3; // staticメンバ変数の定義
main.cpp
コード:
#include <iostream>
#include "ab.h"
int main()
{
A a;
std::cout << a.x << std::endl;
B b;
std::cout << b.x << std::endl;
}
Re: [c++]ライブラリファイル内の未解決外部シンボルについて
Posted: 2017年4月03日(月) 11:42
by purin52002
かずまさん
返信ありがとうございます。
未解決はやっぱり未定義なんですね^^;
自分でいろいろ検証したところ、自己解決してしまいました。(申し訳ないです。
問題はコードではなくリンカのほうにあったようです。
私はvisualstudio2015で開発をしています。
ライブラリファイルを2つ(A,Bとします)利用するためにライブラリがあるディレクトリのパスをプロパティで設定しました。
どうやらこのディレクトリの中にゴミが混ざっていたようで、
Adir->A
Bdir->B,A(!?)
のようにBのディレクトリにAのライブラリが混ざっていたのです。
で、Bディレクトリの中にあるAが読み込まれて変なことになっていたようです。
Bディレクトリ内のAを削除したところ未解決エラーは出なくなりました。
お騒がせして申し訳ないですorz
お早い回答ありがとうございました^^