• 締切済み

クラスのファイル分割について

こんにちは。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の引数と合わない」といった旨のエラーを出しています。何が悪いのでしょうか。ご教授お願いします。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

手許にあるclang++(3.0)でもまったくエラーになりません。 clang以外で、そんな「赤い下線」なんて出すコンパイラあったかな、と思って 「Invalid arguments Candidates」で検索してみました。 ざっと斜め読みしたところでは、EclipseのCDTのバグというのがありました。 それに該当しませんか?

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.3

vector<struct edge>とか。

回答No.2

egdeにコピー・コンストラクタ/オペレータが定義されていないからじゃないかしら。

tagussann
質問者

補足

ご指摘ありがとうございます。 指摘にあったとおり、 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; } とコピーコンストラクタ、オペレータを定義致しましたが、それでも変わらないようです・・・

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

エラーメッセージは, 正確にはなんと書いてあるのですか? また, 出てくるメッセージはそれだけですか? できれば「同じ問題が起きるなるべく小さなプログラム」を出してほしいんだけどね.

tagussann
質問者

補足

失礼しました。こちらにコードを載せさせて頂きます。 --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 &) ' となっております。ご教授よろしくお願いします。

関連するQ&A