class Customer{
public:
Customer(){};
Customer(int i)
{id=i;}
~Customer(){...};
static void* run(void* arg)
{
//code for execution
return NULL;
}
private:
static int id;
}
int main(void)
{
int index;
int status;
//Create Customer Threads
pthread_t Customer_Threads[50];
Customer *Customers;
Customers=new Customer[50];
// create 50 Customer threads
for (index = 0; index < 50; index++) {
Customers[index]=*new Customer(index);
status = pthread_create (&Customer_Threads[index], NULL, Customers[index].run, NULL);
assert(0 ==status);
}
}
私の質問は、私はクラスのお客様に関数を呼び出すのpthread_createを使用しようとすると、エラーが約ポップアップ表示され、クラス内の関数「顧客への未定義参照::〜A()」「 と」未定義の参照Customer :: A()へ私はクラスのCustomerオブジェクトの配列を作成し、クラスのお客様には、実行機能を実行するためにmulti_threadを使用したいpthread_createの呼び出し
、私はこれらのエラーに対処する方法がわかりません。ありがとう。
私はXcodeでC++を使用するとLinuxでコンパイルします。
---------------
エラー: 'Customer :: id'への未定義参照。
なぜわかりません。
のようになりますが、コンストラクタとデストラクタは宣言しますが、*定義*はどこにありますか?実装)とコンストラクタとデストラクタの? –
また、この式 'Customers [index] = * new Customer(index)'はあなたにメモリリークを与えます。 Javaとは異なり、オブジェクトインスタンスを作成するために 'new'を使う必要はありません。 'Customer(index)'を実行するだけで、それは 'Customers [index] = Customer(index)'に変更されます。 –
これは、**この**コードのコンパイル時に受け取ったエラーを決して想像できません。 'Customer'はコンストラクタとデストラクタを持っていれば、' A'ではなく 'Customer'('〜Customer')というタイトルになります。あなたのクラス定義の後に ';'が終わっていないことにも気づきます。コンパイラは、リンクフェーズに達するずっと前から、これらのことについて天国に文句を言うべきです。 – WhozCraig