2017-05-19 87 views
0

我創建了一個名爲Cat的類。當我嘗試訪問Cat類時,它顯示以下錯誤。爲什麼class在使用類名相同的頭文件和cpp文件創建時出現錯誤

||=== Build file: "no target" in "no project" (compiler: unknown) ===| 
F:\Classes\Classes.o:Classes.cpp|| undefined reference to 'Cat::Cat()'| 
F:\Classes\Classes.o:Classes.cpp|| undefined reference to 'Cat::speak()'| 
F:\Classes\Classes.o:Classes.cpp|| undefined reference to 'Cat::~Cat()'| 
F:\Classes\Classes.o:Classes.cpp|| undefined reference to 'Cat::~Cat()'| 
||error: ld returned 1 exit status| 
||=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===| 

這裏是我的代碼:

對於Classes.cpp

#include<iostream> 
#include "Cat.h" 
using namespace std; 
int main() 
{ 
    cout<<"Hello"<<endl; 
    Cat cat1; 
    cat1.speak(); 
    cout<<"Program Ended..."<<endl; 
    return 0; 
} 

對於Cat.cpp

#include<iostream> 
#include "Cat.h" 
using namespace std; 
Cat::Cat() 
{ 
    cout<<"Cat created.."<<endl; 
    color = 'R'; 
} 
Cat::~Cat() 
{ 
    cout<<"Cat Destroyed.."<<endl; 
} 
void Cat::speak() 
{ 
    if(color == 'R') 
     cout<<"I am a red Cat....."<<endl; 
    else 
     cout<<"I am a Cat.....------"<<endl; 
} 

對於Cat.h

#ifndef CAT_H_INCLUDED 
#define CAT_H_INCLUDED 
class Cat 
{ 
    public: 
     void speak(); 
     char color; 
     Cat(); 
     ~Cat(); 
    protected: 
    private: 
}; 
#endif // CAT_H_INCLUDED 

我應該提一件事。所有這些文件都在同一個文件夾中,我正在使用CodeBlocks。

+2

它似乎忘記了在你的版本中包含Cat.cpp。 –

+0

Grt !!現在正在工作。但是爲什麼我應該包含Cat.cpp文件,而我已經包含了定義該類的頭文件呢? @RSahu – Gulzar

+1

Cat的成員函數只在.h文件中聲明。它們在.cpp文件中定義。當.h文件在另一個文件中包含'#inc'時,編譯器不會自動從.cpp文件獲取實現。 –

回答

2

當您忘記將包含定義的庫鏈接到您在代碼中使用的函數時,通常會收到「未定義的引用」。你的情況是相似的。 因此,無論 - 您爲「貓」的代碼和鏈接獨立的庫到您的客戶端代碼(Class.cpp)OR - 編譯是類似的方式,如下行 G ++ Classes.cpp Cat.cpp -o貓

相關問題