2011-02-05 9 views
0

皆私はプログラマを始めており、助けが必要です。私はここにある割り当ての部分Aのみで作業しています:http://cs.binghamton.edu/~sgreene/cs240-2010f/labs/lab2.htmlシンプルなC++プログラムのヘルプコンパイル

しかし私は自分のプログラムのコンパイルに問題があります。私のメイクファイルとcppファイルで何が間違っているのか教えてください!ここに私のファイルは、以下のとおりです。

# CS240 Lab2 Makefile 

all: lab2 

lab2: lab2.o 
    g++ -Wall lab2.o -o lab2 

lab2.o: main.cpp 
    g++ -Wall -c main.cpp -o lab2.o 

lab2.o: tenstrings.cpp 
    g++ -Wall -c tenstrings.cpp -o lab2.o 

/*tenstrings.h*/ 
#ifndef TENSTRNGS 
#define TENSTRNGS 

class TenStrings 
{ 
public: 
    // Default Constructor 
    TenStrings(); 
} 
#endif 

/* tenstrings.cpp */ 

#include "TenStrings.h" 

//Default Constructor 
TenStrings::TenStrings() 
{} 

/* main.cpp */ 

#include "TenStrings.h" 

int main() 
{ 
    TenStrings varTen; 
    return 0; 
} 

あなたはそのちょうど私がに始めるために、さえプログラムこのありえを見ることができるようにコンパイルしていますが、私はエラーの束を得ています:

________________________________________________________________________________________ 
Makefile:12: warning: overriding commands for target 'lab2.o' 
Makefile:9: warning: ignoring old commands for target 'lab2.o' 
g++ -Wall -c tenstrings.cpp -o lab2.o 
In file included from tenstrings.cpp:6: 
TenStrings.h:11:3: warning: no newline at end of file 
tenstrings.cpp:7: error: new types may not be defined in a return type 
tenstrings.cpp:7: error: return type specification for constructor invalid 
_________________________________________________________________________________________ 

ありがとうございます!

+0

コードを固定幅フォントで表示するには、4つのスペースをインデントしてください。それはもっと良く見えます! –

+0

http://cplusplus.syntaxerrors.info/index.php?title=New_types_may_not_be_defined_in_a_return_type – THEn

答えて

1

私はあなたのメイクがより次のようになりますと思う:

all: lab2 

lab2: main.o tenstrings.o 
    g++ main.o tenstrings.o -o lab2 

main.o: main.cpp 
    g++ -Wall -c main.cpp -o main.o 

tenstrings.o: tenstrings.cpp 
    g++ -Wall -c tenstrings.cpp -o tenstrings.o 

あなたの最初の2つのエラーを整理するかもしれません。

+1

リンクの依存関係やコマンドも修正する必要があります。 –

+0

乾杯、ポールR! – Dave

+1

ほぼそこに - lab2.oを取り除く –

0

クラス宣言の最後にセミコロンがありません。

0

あなたはクラス定義の最後にセミコロンを忘れたと思います。

/*tenstrings.h*/ 
#ifndef TENSTRNGS 
#define TENSTRNGS 

class TenStrings 
{ 
public: 
    // Default Constructor 
    TenStrings(); 
}; // <--- !!!! 
#endif 
1

クラス宣言の最後にセミコロンが必要です。また、Makefileをもう少し簡単に書き直すこともできます。

all: lab2 

lab2: lab2.o 
    g++ -Wall lab2.o -o lab2 

lab2.o: main.cpp tenstrings.cpp 
    g++ -Wall -o lab2.o tenstrings.cpp main.cpp 
+1

すべてのソースファイルを一度に処理する場合(このような小規模の場合は罰金、ダースの場合は愚か、数百の場合は愚かさ)、オブジェクトファイルを構築してから実行可能ファイルを作成することはほとんどありません。実行可能ファイルを作成するだけです。しかし、適切に(各ソースファイルはオブジェクトファイルを与え、次に.oのリンクを行います)、ドリルのためだけに行います。 – dmckee

+0

ありがとうございます。最終的にコンパイルされますが、まだメッセージが表示されます:TenStrings.h:警告:ファイルの最後に改行がありません..これは単なる警告ですが、ここで何か心配すべきですか? – user593301

+0

btw ..このメイクファイルはあなたが私に与えたことはありませんが、セミコロンは助けてくれました – user593301

1

あなたは ';'でTenStringsクラスを終了しません。 TenStrings.hの最後にはエラーがあります。

+0

ありがとうございました。最終的にコンパイルされますが、まだメッセージが表示されます:TenStrings.h:警告:ファイルの最後に改行がありません..これは単なる警告ですが、ここで何か心配すべきですか? – user593301

+0

ええ、文字通り、ファイルの最後に改行を追加してください。おそらく、セミコロンの後には何もないことがわかります。ちょうどそこに行き、enterを押してください。 – Dave

0

同じmakeのターゲットが2回定義されています。次に、プロジェクトのすべての部分をリンクしません。これは次のようなものでなければなりません:

all: lab2 

lab2: lab.o lab2.o 
    g++ -Wall lab.o lab2.o -o lab2 

lab.o: main.cpp 
    g++ -Wall -c main.cpp -o lab.o 

lab2.o: tenstrings.cpp 
    g++ -Wall -c tenstrings.cpp -o lab2.o 
関連する問題