重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

A 回答 (4件)

手許にあるclang++(3.0)でもまったくエラーになりません。



clang以外で、そんな「赤い下線」なんて出すコンパイラあったかな、と思って
「Invalid arguments Candidates」で検索してみました。

ざっと斜め読みしたところでは、EclipseのCDTのバグというのがありました。

それに該当しませんか?
    • good
    • 0

vector<struct edge>とか。

    • good
    • 0

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

この回答への補足

ご指摘ありがとうございます。
指摘にあったとおり、

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;
}

とコピーコンストラクタ、オペレータを定義致しましたが、それでも変わらないようです・・・

補足日時:2012/01/10 23:24
    • good
    • 0

エラーメッセージは, 正確にはなんと書いてあるのですか? また, 出てくるメッセージはそれだけですか?



できれば「同じ問題が起きるなるべく小さなプログラム」を出してほしいんだけどね.

この回答への補足

失礼しました。こちらにコードを載せさせて頂きます。

--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 &)
'

となっております。ご教授よろしくお願いします。

補足日時:2012/01/10 20:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!