2012-02-23 15 views
1

// Class1のメインは、どのようにC++

int main() 
{ 
    ... 

    Class1 obj1(parameters); 
    Class1 obj2(parameters);  
    Class1 *Array[2]; 
    Array[0] = obj1; 
    Array[1] = obj2; 

    Class1 *Pointer = Array; 

    Class2 repository(Pointer); //where the error occurs. 
} 

obj1とobj2の中でメイン別のクラスで、クラスのコンストラクタのパラメータを渡すために、前に作成され、Class1のオブジェクトですました。 class2はデータレポジトリクラス(Class2)です。Class2からそれを指すように配列を渡そうとしています。

#include "Class2.h" 
//what Class2 constructor looks like. 

Class2::Class2(Class1* Pointer) 
{ 
    tPointer = Pointer; 
} 

問題

は、私はすべてのヘルプは非常に感謝をいただければ幸いです Undefined symbols: "Class2::Class2(Class1*)", referenced from: _main in Class1 ld: symbol(s) not found

というエラーを取得していることです。

+0

どのようにリンクしていますか?コマンドライン – fazo

+0

@biz 'Class2'定義を持つソースファイルをビルドしていますか? – Mahesh

+0

@Maheshはい私はclass1 main()でビルドしようとしていますが、それはできません – Glove

答えて

2

あなたにはかなりの間違いがあります。私はそれらを修正する方法を示します。

int main() 
{ 
    ... 

    Class1 obj1(parameters); 
    Class1 obj2(parameters);  
    Class1 *Array[2]; 
    Array[0] = &obj1; // Array holds pointers to Class1, so you need to use & 
    Array[1] = &obj2; // Here too. 

    Class1 *Pointer = Array[0]; // Use Array[0] or Array[1] here 

    Class2 repository(Pointer); //Should be okay now 
} 

概要:あなたはアドレス演算子(次の行に同じ)を忘れているArray[0] = obj1;ラインで

。それだけでArrayがポインタへのポインタであるため、

ラインClass1 *Pointer = Array;は意味がありません、あなたはOBJ1またはobj2のいずれかで、ポインタのポイントを作るためにArray[0]またはArray[1]のいずれかをしたいです。

+0

@jozefg:あなたのご意見が分かりません。あなたは 'Class1 ** Pointer = Array;'と 'Class2 repository(* Pointer);'を意味しますか? –

+0

「Class1 ** Pointer = Array;」は有効ではないはずですか?結局、Arrayには 'Class1' Pointerへのポインタが含まれています。 – jozefg

+0

@jozefg:はい、有効です。しかし、あなたの最初のコメントでは、私はClass1 * Pointer = Arrayを信じています。これは有効ではありません。 –

2

[OK]をので、いくつかのこと:

1)アレイは、あなたは、ポインタの配列を作るobj1と、現時点でポインタobj2がありませんされている)
2 **それはクラス1のだ*クラス1のタイプではありません!それらを動的に割り当てるか、&演算子を使用してアドレスを取得してください。
3)これは提案です。可能であれば、std :: vectorを使用してください。ポインタ配列を使って作業することは、痛みを伴うことがあります。
しかし、もしあなたが主張するなら、すぐ前に行く。