[c++]ライブラリファイル内の未解決外部シンボルについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: [c++]ライブラリファイル内の未解決外部シンボルについて

Re: [c++]ライブラリファイル内の未解決外部シンボルについて

#3

by purin52002 » 8年前

かずまさん
返信ありがとうございます。

未解決はやっぱり未定義なんですね^^;
自分でいろいろ検証したところ、自己解決してしまいました。(申し訳ないです。

問題はコードではなくリンカのほうにあったようです。

私はvisualstudio2015で開発をしています。
ライブラリファイルを2つ(A,Bとします)利用するためにライブラリがあるディレクトリのパスをプロパティで設定しました。

どうやらこのディレクトリの中にゴミが混ざっていたようで、

Adir->A
Bdir->B,A(!?)

のようにBのディレクトリにAのライブラリが混ざっていたのです。
で、Bディレクトリの中にあるAが読み込まれて変なことになっていたようです。

Bディレクトリ内のAを削除したところ未解決エラーは出なくなりました。
お騒がせして申し訳ないですorz

お早い回答ありがとうございました^^

Re: [c++]ライブラリファイル内の未解決外部シンボルについて

#2

by かずま » 8年前

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;
}

[c++]ライブラリファイル内の未解決外部シンボルについて

#1

by purin52002 » 8年前

こんばんは、今回は大嫌いな未解決外部シンボルについて質問があります。
  1. staticなメンバ変数を持つクラス
  2. 1を継承したクラス
上の二つのようなクラスをライブラリ化しました。
これらは二つともビルドできたのですが、
これら二つを利用してプログラムを書くと"メンバ変数は未解決です"というエラーが出ます。

片方だけを利用するとビルドできるので、おそらくstaticメンバ変数が二重定義されている(同じソースファイルが二度読まれている)んじゃないかなとアタリをつけています。
、、、つけてるだけで確信はないのですが^^;

というわけで、今回の質問です。
  • ソースファイル(というよりオブジェクトファイル?)を二重に読み込まないようにする方法はあるか?
  • そもそもほかに解決方法があったりするのか?
よろしくお願いします<(_ _)>

ページトップ