2012-02-21 6 views
0

私はC++をやって以来、しばらくお待ちしておりますので、ここで少し問題があります。私はallQueueをメインファイルに宣言している行でこのエラーが発生しています。私は明らかにあなたが私にもっと知りたいものが必要な場合は、私が必要と思わない多くのコードを削除しました。オブジェクトエラーのあるベクトルを使用する

g++ mainFile.cpp MyClass.cpp extraObjectFile.o -o mainFile 

してコンパイル

が生成:

error: expected constructor, destructor, or type conversion before ‘<’ token 

メインファイル

#include <stdio.h> 
#include <stdlib.h> 
#include <vector> 
#include <iostream>  
#include "MyClass.h" 

vector<MyClass> allQueue; 
int main() 
{ 
    allQueue.push_back(new MyClass(100)); 
} 

をMyClass.cpp

#include "MyClass.h" 

MyClass::MyClass(int start_priority) 
{ 
    priority = start_priority; 
} 


int MyClass::getPriority() 
{ 
    return priority; 
} 

MyClass.h

class MyClass 
{ 
    int priority; 
    public: 
     MyClass(int); 
     int getPriority(); 
}; 
+0

誰も_why_を 'vector'の前に' std :: 'を追加するよう説明していないので、' vector'テンプレートが 'std'名前空間に属しているからです。代わりに、あなたのインクルードの後に​​ 'using namespace std;'を使うこともできます。 [http://www.cplusplus.com/doc/tutorial/namespaces/](http://www.cplusplus.com/doc/tutorial/namespaces/) – ssell

+0

を参照してください。私は数年前に書いた古いcppファイルからいくつかのコードをコピーしました。私はこのファイルを古いものと比較していましたが、名前空間の行をコピーするのを忘れていたに違いありません。それを発見したことはないでしょう... –

答えて

6

[OK]を、まず最初にそのようMyClass()コンストラクタを使用する必要がありますときエラーメッセージを投稿してください。完全なエラーメッセージが投稿されています。そうしないと、誰もあなたを助けることができないかもしれません。

第二に、あなたの質問への答え:あなたのmain.cppにファイル内

使用

std::vector<MyClass> allQueue; 

。オブジェクトを追加するには、

allQueue.push_back(MyClass(100)); 

を追加します。 MyClassのコピーコンストラクタも実装することを検討してください。

+0

+1これはすべてのコンパイラエラーを取り除きました。'ベクトル'または 'ベクトル'を使う方が良いと考えられますか? –

+1

@jb保存する内容によって異なります。 1つはポインタを格納し、もう1つはオブジェクト自体を格納します。ほとんどの場合、単にオブジェクトを保存する必要があります。ポインタを格納する際には、 'vector'から消去するときに' delete'する必要があります。そうしないとメモリリークが発生します。 – ssell

+1

@jb。 MyClassまたはMyClass *をベクトルのコンテナ要素として使用するかどうかは、達成したいものに完全に依存します。両方のアプローチにはプロとコンズがあります。しかし、多くの人がMyClassの使用はより安全であると主張しています。本当にポインタを使用する必要がある場合にのみ、スマートポインタ(boost :: shared_ptrやStd :: shared_ptrなど)を使用することを検討する必要があります。 11サポート)。 –

1

std::vectorに変更vector

1
  1. 使用std::vectorではなく、単にvector

  2. 演算子newは、オブジェクト自体ではなく、MyClassへのポインタを返します。あなたはポインタのベクトル(vector<MyClass*>)を作る必要があるか、この

    MyClass m(100); allQueue.push_back(m);

または単に注意する

allQueue.push_back(mMyClass(100)); 
関連する問題