2017-09-09 12 views
0

これは完全にコンパイルされます。ldが1を返しました。パラメータを渡すと終了ステータスエラーが発生しました

とすぐに私は私がコンパイルした後、次のエラー

'ld returned 1 exit status error'

を取得するには、次のコード

'populateList(wide, in);'

のコメントを外して

const int NUM_PLAYERS = 10; 

struct wrType 
{ 
string name[NUM_PLAYERS]; 
string team[NUM_PLAYERS]; 
int catches[NUM_PLAYERS]; 
int yards[NUM_PLAYERS]; 
int td[NUM_PLAYERS]; 
double ypc[NUM_PLAYERS]; 
}; 

void populateList(wrType[], ifstream&); 

int main(int args, char* argv[]) 
{ 
wrType *wide; 
char select; 
ifstream in; 
in.open(argv[1]); 

/*populateList(wrType wide, ifstream in); code causing error*/ 

} 

void populateList(wrType wide, ifstream in) 
{ 
}; 

。 私は多くのフォーラムを見てきましたが、問題を解決できませんでした。私たちは最近、構造体やクラスに入っています。概念を誤解しているのか、それをどう動かすのかはわかりません。

コードは、コマンドラインでファイルを渡してから、後でそれにアクセスし、10人の選手の異なる選手のバブルソートでソートすることができます。私は私の手が保持されないようにしています。なぜなら、私は後で闘うために残りの部分を残しました。コードは関数なしでmainの中で動作しますが、私が持っているコードで関数を呼び出すとすぐに、エラーが発生します。

'In function main': (.text+0xad): undefined reference to populateList(wrType*, std::basic_ifstream >&)' collect2: error: ld returned 1 exit status'

編集2:私はそれは私に変換することはできませんMYTYPEを与えるポインタとして渡すしようとすると、

また*完全なエラーと

アップデートをMYTYPEする コードとを

'populateList(wrType wide, ifstream in);'

次のエラーが返されます。

関数 'int main(int、char **)':

34:22: error: expected primary-expression before ‘wide’ populateList(wrType wide, ifstream in); ^ 34:37: error: expected primary-expression before ‘in’ populateList(wrType wide, ifstream in);

+0

1.これは唯一のエラーメッセージですか? 2.コメントアウトされたコードは何をすべきですか? 3. Visual C++を使用していますか? –

+1

あなたのpopulateList関数を呼び出そうとしているコメントアウトされたコードはありますか?その場合、 'populateList(wide、in);が必要です。あなたの関数は、あなたがそれを呼び出すときにどんな型が予期しているかを示します。あなたはそれらの型のインスタンスを渡します。あなたは宣言と定義が異なっています。あなたはそれを修正する必要があります。(そして、彼らはそれが正しいと思います。) – zzxyz

+3

あなたの宣言と定義は異なります。リンカーは関数を見つけることができません、それはそれが異なる過負荷だと思うでしょう。 functionを呼び出すときに、型だけの変数を渡すことはありません: 'populateList(wide、in);' –

答えて

1

このコードには多くの問題があります。

  1. struct wrType 
    { 
    string name[NUM_PLAYERS]; 
    ... 
    }; 
    

    あなたはレコードの配列ではなく、並列配列のレコードが必要です。上記struct[...]をすべて削除します。

  2. wrType *wide; 
    

    ポインタではなく、これらの構造体の配列が必要です。

    wrType wide[NUM_PLAYERS]; 
    
  3. populateList(wrType wide, ifstream in); 
    

    これは正しい関数呼び出し構文ではありません。

  4. void populateList(wrType wide, ifstream in) 
    

    これは、あなたがこの宣言の周りにあなたの全体のプログラムを構築する必要があり、以前の宣言

    void populateList(wrType[], ifstream&); 
    

と一致していません。まず、身体を埋め、その後

void populateList(wrType[] wide, ifstream& in) 
{ 
} 

その行に従うにあなたのpopulateList定義をもたらします。

in >> wide.name[x]; 

のような行は、もはや正しいものではなく、変更する必要があります。

+0

ありがとうございます。それは問題を解決した。私は練習を続け、読書を続けなければなりません。私はもともとそれをwrTypeワイド[NUM_PLAYERS]として持っていました。関数の宣言を(wrType [] wide、ifstream&in)に変更したことはありません。何らかの理由で私はそれが 'wrType []'とタイプされていると間違っていたと思っていました。私はそのコンセプトがどこから得られたのか分かりません。そして、もう一度私はすべてのC++を把握していると思った。私のルーキーミス。 – gamer1996

関連する問題