- 締切済み
クラスのファイル分割について
こんにちは。JavaをやっていましたがC++が必要になってC++を勉強している者です。 クラスを別のファイルに分割する際の書き方についてなのですが、 --Graph.h-- struct edge{ int to, cost; edge(int to,int cost){ this->to = to; this->cost = cost; } } class dijkstra{ public: vector<edge> *G; ~~~ void set_graph(int N); void add_edge(int a, int b, int cost); ~~~ } ---- --Dijkstra.cpp-- void dijkstra::set_graph(int N){ G = new vector<edge>[N]; } void dijkstra::add_edge(int a,int b,int cost){ G[a].push_back(edge(b,cost)); } ---- としたとき、当方の開発環境のEclipseは「push_backの引数と合わない」といった旨のエラーを出しています。何が悪いのでしょうか。ご教授お願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
手許にあるclang++(3.0)でもまったくエラーになりません。 clang以外で、そんな「赤い下線」なんて出すコンパイラあったかな、と思って 「Invalid arguments Candidates」で検索してみました。 ざっと斜め読みしたところでは、EclipseのCDTのバグというのがありました。 それに該当しませんか?
- hidebun
- ベストアンサー率50% (92/181)
vector<struct edge>とか。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
egdeにコピー・コンストラクタ/オペレータが定義されていないからじゃないかしら。
- Tacosan
- ベストアンサー率23% (3656/15482)
エラーメッセージは, 正確にはなんと書いてあるのですか? また, 出てくるメッセージはそれだけですか? できれば「同じ問題が起きるなるべく小さなプログラム」を出してほしいんだけどね.
補足
失礼しました。こちらにコードを載せさせて頂きます。 --Graph.h-- #ifndef GRAPH_H_ #define GRAPH_H_ using namespace std; #include <iostream> #include <vector> #include <algorithm> struct edge{ int to,cost; edge(int to,int cost){ this->to = to; this->cost = cost; } }; class dijkstra{ int N; public : vector<edge> *G; int dijkstra_solve(); void set_graph(int N); void add_edge(int from,int to,int cost); }; #endif /* GRAPH_H_ */ ---- --Dijkstra.cpp-- #include <iostream> #include <vector> #include <algorithm> #include "Graph.h" using namespace std; void dijkstra::set_graph(int N){ G = new vector<edge>[N]; } void dijkstra::add_edge(int from,int to,int cost){ G[from].push_back(edge(to,cost)); } ---- 上記のようになっておりまして、push_backに赤い下線が出てきて、 Invalid arguments ' Candidates are: void push_back(const edge &) ' となっております。ご教授よろしくお願いします。
補足
ご指摘ありがとうございます。 指摘にあったとおり、 edge(const edge& obj){ this->to = obj.to; this->cost = obj.cost; } edge& operator=(const edge& obj){ this->to = obj.to; this->cost = obj.cost; return *this; } とコピーコンストラクタ、オペレータを定義致しましたが、それでも変わらないようです・・・