2016-05-20 14 views
0

を宣言されていない私は、私はC++を学ぶためのオンラインチュートリアルを以下の午前私の問題 https://www.youtube.com/watch?v=KqvQivVfAdIシンプルなオブジェクト指向猫はここで

のビジュアルで作られたビデオです。これまでにすべてが素晴らしいものになっています。私はcode :: blocksを使っていて、教授の人はEclipseを使っています。

私はこの特定のコードを書いてくれましたが、code ::ブロックでは動作しません。私はCat.cppのエラーを取得しています:

'Cat' has not been declared

は私がコードにしていますので、別々に行う必要がある何か::ブロックがありますか?

彼のビデオ、興味があれば...ここ

が私のコードです:

main.cppに

#include <iostream> 
#include "Cat.h" 

using namespace std; 

int main(){ 

    Cat cat1; 

    cat1.speak(); 
    cat1.jump(); 

    return 0; 
} 

Cat.h

#ifndef CAT_H_INCLUDED 
#define CAT_H_INCLUDED 

class Cat{ 
public: 
    void speak(); 
    void jump(); 
}; 

#endif // CAT_H_INCLUDED' 

Cat.cpp

#include <iostream> 
#include "Cat.h" 

using namespace std; 

/*Error on this line*/ 
void Cat::speak(){ 
    cout << "Meouwwww1!!! " << endl; 
} 

/*probably on this on too */ 
void Cat::jump(){ 
    cout << "Jumping to top of bookcase1" << endl; 
} 











#include <iostream> 

using namespace std; 

一緒に入れコード

#ifndef CAT_H 
#define CAT_H 



class Cat 
{ 
public: 
    Cat(); 

     void speak(); 

    private: 
}; 

#endif // CAT_H 


void Cat::speak() 
{ 
    cout << "Meouwww2!!!" << endl; 
} 




int main(){ 

    Cat cat1; 

    cat1.speak();  /*error happening here now 
        error: id returned 1 exit status*/ 

    return 0; 
} 

あなたのクラスの猫のためのコンストラクタとデストラクタを追加する必要がありますエラー https://gyazo.com/bb3574ea504f2357c7ea2987facc9874

+5

このコードには何も問題はありません。問題は他のところです。 –

+1

実際のコードですか?あなたはクラス定義の終わりに何かセミコロンを忘れていませんでしたか? –

+0

これは私のコードのコピー&ペーストコピーです – newToCpp

答えて

1

error: id returned 1 exit status

第実際のエラーが

undefined reference to Cat::Cat() 
error: ld returned 1 exit status 

ありあり終了ステータスを返すことができる「id」はありません。リンカーであるldがあります。その仕事は、あなたのファイルがコンパイルされた後、実行可能ファイルを作成することです。コンパイルしたすべてのファイルを取り込み、リンクします。ファイル内で呼び出す関数があり、ファイルに定義されていない場合、リンカーは標準ライブラリまたは指定した追加のライブラリで関数を検索し、関数(および関数が呼び出す関数)を追加しますあなたの実行可能ファイル

ここで問題は、クラスCatのコンストラクタを暗黙的に呼び出して宣言しても、それを提供していないことです。明らかに、リンカは標準ライブラリでクラスのコンストラクタを見つけることができません。

これに対処するには2通りの方法があります。一つは、あなたのコードから行

Cat(); 

を削除することがあり、また、コンストラクタを提供するために、すなわち

Cat::Cat() { 
} 

です。この場合、デフォルトコンストラクタは自動的に生成されます。(各クラスについて、コンストラクタが提供されていない限り、パラメータを持たないコンストラクタは自動的に生成されます。)

+0

これは[この提案]からこれを追加したばかりのOPです(http:// stackoverflow。com/a/37336187/4143855)、元の問題の一部ではありませんでした。しかし、この全体がちょうど混乱になったと言うことは難しいです。 – Tas

+0

@それは今のところテキストに反応します。彼のコードの歴史的なバージョンには対応できません。 :) – user31264

+0

Tbh私はこの4mのすべての有用な人々がすべて私に助言を与えたすべてを手にした後、これを修正したものを100%確信していません。 Darkは私にすべてのファイルを1つのファイルに入れるように指示しました。しかし私がこれを試みる前に、あなたは私のポストの一番下に表示されているフルバージョンのコードを作り直しました。しかし、再作成されたコードにはCat()が含まれていました。だからuser31264の提案ごとに、私はそれを削除し、それは1つのファイルで正常に働いた。次に、クラスとヘッダーに戻し、すべてのものが再び正しいものになった後に処理を進めました。出来た!!!だから私は誰もが助けてくれればと感謝しています!!! – newToCpp

-4

の絵。あなたができる簡単な修正のためのヘッダで

: キャット(){} 〜キャット(){}

+0

私は非常に新しいと私は混乱して聞こえます。私はするだろう クラスCat(){} ;? あなたのクイックレスポンスに感謝します。 – newToCpp

+7

明示的にanyを指定しないと、コンパイラはデフォルトコンストラクタとデストラクタを生成します。 –

+1

これは間違っています。 – Tas

関連する問題