2016-02-17 64 views
0

所以我有這個頭文件:「錯誤:類定義」 - 但沒有重新說明

#include <iostream> 
#include <string> 

class Furniture 
{ 
    float width, height, depth; 
    std::string name; 

public: 
    // Constructor 
    Furniture(std::string name); 
    void ReadDimensions(); 
    virtual void Print(); 
}; 

這.cc文件來定義上述聲明的函數:

#include "Furniture.h" 

Furniture::Furniture(std::string name) 
{ 
    this->name = name; 
} 

void Furniture::ReadDimensions() 
{ 
    // Read width 
    std::cout << "Enter width: "; 
    std::cin >> width; 
    // Read height 
    std::cout << "Enter height: "; 
    std::cin >> height; 
    // Read depth 
    std::cout << "Enter depth: "; 
    std::cin >> depth; 

    if (width <= 0 || height <= 0 || depth <=0) 
      std::cout << "You entered invalidd values\n"; 
} 

當我嘗試編譯我的主文件,其中包括兩個子類寫在他們自己的文件,它給了我一個錯誤,它讀取

「Furniture.h:4:錯誤:重新定義'類傢俱'

Furniture.h:5:錯誤:以前的定義「類傢俱」」

但據我所知,我正確聲明的類和定義並沒有重新聲明它。爲什麼它給我這個錯誤,我能做些什麼來解決它?

+1

你在cc文件main中還有'#include「Furniture.h」'嗎?你是否在任何地方包含傢俱cc文件? – NathanOliver

+2

我看不到'#pragma once'或在標題中包含警衛。 – DeathTails

回答

2

嘗試在.h文件中添加以下代碼。這將防止重新定義。

#ifndef __FURNITURE_H__ 
#define __FURNITURE_H__ 

#include <iostream> 
#include <string> 

class Furniture 
{ 
    float width, height, depth; 
    std::string name; 

public: 
    // Constructor 
    Furniture(std::string name); 
    void ReadDimensions(); 
    virtual void Print(); 
}; 

#endif 
+2

我會跳過雙下劃線,因爲這樣[名稱是保留](http://stackoverflow.com/questions/9668947/reserved-names-in-the-global-namespace)的實現。 –

+0

順便說一句,你的答案被稱爲*包括警衛*。 –

+0

非常感謝你,我會確保我閱讀包括警衛。 –