• ベストアンサー

関数の引数にSTLを使う

こんにちは。C++の勉強を最近始めました。 メンバ関数の引数に、STL(queue)を使おうとしています。 以下のように、参照にして使おうと思っています。 int test01::method(queue<int>& q) { return 0; } ですが、コンパイルしようとすると、 「識別子 'queue' がシンタックスエラーを起こしました。」 と言われてエラーになってしまいます・・・。 (他の箇所でqueueを使っていますが、そこではエラーは出ないので、 ヘッダファイルや名前空間はちゃんと指定できていると思います) STLに関する情報を集めてみたのですが、 引数にして使った例を見つけることができませんでした。 シンタックスエラーなので、文法や構文などが正しくないのだと思うのですが、 関数の引数にそもそもSTLを指定できないのか、 コーディングの仕方が間違っているのか、判断ができません。 どのようにしたら、引数に指定できるのでしょうか? ご存知の方がいらしたら、おしえていただきたいです。 よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

プログラムを見せてください。 queue<int>& q ここの部分ではコンパイルエラーは出ませんでしたので、 指定は間違ってないと思いますよ。 (自分は STL を引数によく使ってます)

ijhnb6543f
質問者

お礼

試していただいて済みません。 原因としては、using namespace std;を指定していませんでした。 名前空間の指定とか、スコープを必要最低限に絞っていたのですが、 絞りすぎたみたいです・・・。 今度質問させてもらうときは、 一部分ではなく、もっと全体的なプログラムを書こうと思います。 ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

前後がないのでなんともいえないんだけど, ・一応 std::queue にしてみる ということは考えられるかな. まあ, かっこの対応がとれてないとかいう可能性も実際にはあるんだけど.

ijhnb6543f
質問者

お礼

うひゃー、ごめんなさい! using namespace std;を指定したら、コンパイルできましたっ! メンバ関数の定義と宣言を、別ファイルで行なっているのですが、 そこだけ、 using namespace std; を指定していませんでした・・・。 ありがとうございました。

関連するQ&A

  • STLのsortで、プライベート変数を比較関数に組み入れたい。

    STLのsortで、プライベート変数を比較関数に組み入れたい。 STLのvectorのsortで比較関数を指定してソートをしようとしております。 ソートしようとするvectorは、とあるクラスのプライベート変数であり、 同じクラスの他のプライベート変数を利用した比較を行おうとしています。 例えば int array[4] = {1, 7, 3, 5}; なるプライベート変数があり、比較関数はこんなアルゴリズムとしたいと。 bool compare(int left, int right) { return array[ left ] < array[ right ]; } この compare をクラスのメソッドとして定義して使えるのかなと思っていたのですが コンパイルしたところエラーが出ました。パブリック変数にして、プレディケートの ためのクラスを作って、そこでパブリックメソッドを作って……という方法は見つかった のですが、そのような面倒な方法を経なければいけないのでしょうか。

  • 関数の引数の型と引数名を取得する方法

    こんにちは。 コンパイル時に関数の引数の型と引数名を取得する手段はありますでしょうか? 関数名は__FUNCTION__がありますが、引数をなんらかの方法で取得したいのですが手段はありますでしょうか? foo(int a0, int a1 ) なら"int a0, int a1"みたいな感じで取得できればと思っています。

  • C言語 関数プロトタイプ宣言の引数に配列を入れたいのですが

    関数プロトタイプ宣言(自作関数)の引数に、A[4][4]というような配列を入れたいのですが、コンパイル時にエラーでincompatibleといわれてしまいます。 A[0][0]からA[3][3]までを個別に引数に指定してもエラーになります。 良い方法は無いでしょうか?

  • VC++、超初心者です。

    intで宣言した変数と変数の足し算を行い、intの変数に代入すると、 シンタックスエラーを起こしてしまいます。 例) int A; int B; int C; C = A + B C2061: 構文エラー : 識別子 'C' がシンタックスエラーを起こしました。

  • C++のヘッダーについて

    C++のプログラミングをしています そこで出てきた問題なのですが・・・ class Aのヘッダファイルa.hをほかのcppファイルにインクルードすると、 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません error C2146: 構文エラー : ';' が、識別子 'test' の前に必要です。 とほかのヘッダファイルでコンパイルエラーがでます ヘッダファイルをインクルードしたときのみこのエラーがでて困っています。 解決法や、ヒントになりそうな事例を知りませんでしょうか?

  • 引数の可変

    覚えたての引数の可変を使ってみた素人であります。(独学です 見よう見真似で書いた為、目茶苦茶だと思われます。 自分で簡単なexeファイルを作ってみていて 引数の可変が必要となったので付け足そうとしていたのですが、「引数の可変」部の他 意外にもfor文からもエラーが出ました(while使えば済む話なのですが) 今までfor文をあまり使わずwhile文ばかり使っていた為、for文の基本的な構文が失敗しているのかもしれません。折角だから使ってみようとした結果がこれです。 #include <stdio.h> #include <locale.h> #include "DxLib.h" #include <string.h> #include <stdarg.h> int i; ・・・略・・・ class CharsOut{ ____int ypixel; ____char *hangar; ____int size; ____int HowMany; ____int list; public:   ____int CharsOuting(int HowMany,int ypixel,int size,...); }; int CharsOuting(int HowMany,int ypixel,int size,...){ ____va_start(list,HowMany); ____for (i=0;i<HowMany;i++){ ________printf("%s",va_arg(list,char *)); ____} ____va_end(list); ____return 0; } ypixel、size...といった変数等は気にしないでください。 成功していたらコードを足すつもりでした。 自分がやりたいことは、main関数から変数HowMany,*hangar等を受け取り 文字列*hangarを引数の分出力したいのであります。引数の可変は*hangarを何個か渡すつもりだったので使用しました。 こんな感じに使うつもりでしたc.CharsOuting(2,0,32,"I am ", "hangury"); ※リストは(int HowMany,int ypixel,int size,...)です ※ハングリーのスペルが違う等ということはとてつもなくどうでもいいことなのです。 自分で「main関数から*hangarを受け取り」と書いておきながらリストに*hangarがない時点でおかしいと思ってはいるのですが、記述の方法が分からないので書けません。 以下エラー (名前とか一部改変・不要な部分省略 1>------ ビルド開始: プロジェクト:(≡ω≡.), 構成: Debug Win32 ------ 1>コンパイルしています... 1>soucer.cpp 1>error C2040: 'i' : 'int' は 'int [5]' と間接操作のレベルが異なります。 1>error C2065: 'list' : 定義されていない識別子です。 1>error C2440: '=' : 'int' から 'int [5]' に変換できません。 1>配列型への変換はありませんが、参照またはポインタから配列への変換があります。 1>error C2446: '<' : 'int' 型から 'int *' 型への変換ができません。 1>整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。 1>error C2040: '<' : 'int [5]' は 'int' と間接操作のレベルが異なります。 1>error C2105: '++' には左辺値が必要です。 1>error C2065: 'list' : 定義されていない識別子です。 1>error C2065: 'list' : 定義されていない識別子です。 1>ビルドログは "file://c:\・・・\Debug\BuildLog.htm" に保存されました。 1>(≡ω≡.) - エラー 8、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== 文章能力なくて申し訳ありません。 ご回答頂ければ幸いであります。宜しくお願いします。 OS:WinXP コンパイラ:Visual C++

  • 引数なしの関数で疑問です

    とほほのjavascriptで勉強しています。 http://www.tohoho-web.com/js/function.htm#objFunction ここの function goukei() { var ans = 0; for (i = 0; i < goukei.arguments.length; i++) { ans += goukei.arguments[i]; } return(ans); } sum = goukei(1, 2, 3, 4, 5); goukei関数を定義したときの引数は、なしなのに goukei関数を呼び出すとき、goukei(1, 2, 3, 4, 5)と、このように5つも引数を指定しています。 Javaでは、こんな呼び出し方をすれば、コンパイルエラーになりますよね。 javascriptでは、引数なしで関数を宣言しても、呼び出すときに、好きな個数の引数を渡せるのですか? 「javascript 引数 省略」とか、「javascript 引数なし」とかいろいろググッてみたのですが 肝心の、javascriptでは引数なしにして宣言しても、呼び出すとき、好きな個数の引数つけて呼び出しても大丈夫。みたいな、確認したい記述はみつかりませんでした。 javascriptでは、このような書き方もできるということでしょうか。

  • 分割コンパイルの方法

    自作のクラスのメンバ変数にSTLのlistを使おうと考えています。 1ファイルでのコンパイルは通るのですが、以下のように分割コンパイルしようとすると、list<int> value; の行で以下のエラーが出ます。 listクラスではなく、別の自作のクラスをメンバ変数にして、そのクラスのヘッダーファイルをインクルードした場合は問題なくコンパイルできるので、何が問題なのか全く見当がつきません。どなたかご存知の方がおられれば解決法を教えていただけないでしょうか?よろしくお願いいたします。 error C2143: 構文エラー : ';' が '<' の前に必要です。 error C2501: 'list' : 識別名を宣言するのに、型が指定されていません。 error C2059: 構文エラー : '<' error C2238: ';' の前に不正なトークンがあります。 /* test.h */ #ifndef TEST_H_INCLUDED #define TEST_H_INCLUDED #include <list> class Test{ public: list<int> value; Test() {} }; #endif

  • C++関数の仮引数について

    関数の引数に配列を指定したいのですが たとえば、 double* point[4]; void setPoint(double _point[]) { for(int i = 0; i < 4; i++){ point[i] = (_point + i); } } int main(void) { setPoint((double[])(1.0, 2.0, 3.0, 4.0)); } '型キャスト' : 'double' から 'double []' に変換できません。 とエラーが出てしまいます。 どのようにすればよいでしょうか?

  • 関数の引数をvoid*でキャストする

    最近見かけたCのプログラムで、関数の引数の型は void* なのですが、その関数を使うときに 引数をvoid*でキャストしていました。 例えば、 func ( (void*) p ); こういうことです。 私の知っている知識では、 void* と 任意の型のポインタは キャストなしに相互に代入可能です。 関数の引数でも、キャストは要らないものだと思っていました。 そうすると、引数を void* でキャストするのは無意味だと思うのですが、・・・ 違うのでしょうか。処理系によるとか。 逆に、関数の引数の型がchar*などで、渡すものが void* のときはどうなのでしょうか。 下のプログラムは、関数byte_orderの引数の型はvoid*ですが、int型へのポインタ( &a )を設定しています。私の環境では、コンパイルエラーも警告もないし、動作も正常です。 #include <stdio.h> #include <string.h> void byte_order(void *vp) { char char_array[4]; strncpy(char_array, vp, 4); printf("出力します:%x %x %x %x\n", char_array[0], char_array[1], char_array[2], char_array[3]); } int main(void) { int a = 0x12345678; byte_order(&a); return 0; } このプログラムは単なる一例であって、質問はバイトオーダに関するものではありません。 また、C言語の質問であって、C++ではありません。

専門家に質問してみよう