2011-05-25 171 views
0

我得到這個錯誤在幾個變量的幾種方法(所有這些都是向量):變量未在此範圍內聲明?

error: ‘parent’ was not declared in this scope 

我已經試過包裝「命名空間DisjointSubsets {...}」裏面我的方法實現,但導致其他問題。它似乎只對矢量做這件事,我試圖在cpp文件的開頭添加一個「#include vector」,它沒有改變任何東西。

這裏是頭文件:

#ifndef UNIVERSE 
#define UNIVERSE 
#include <vector> 
class DisjointSubsets { 
    public : 
     DisjointSubsets (unsigned numberElements = 5) ; 
     unsigned findDS (unsigned) ; 
     bool unionDS (unsigned , unsigned) ; 
    private : 
     vector<unsigned> parent ; 
     vector<unsigned> rank ; 
     unsigned size ; 
} ; 
#include "DisjointSubsets.cpp" 
#endif 

這裏是我的cpp文件寫的方法之一(沒有的#includes)的例子:

unsigned DisjointSubsets::findDS(unsigned index) { 
    return parent[index]; 
} 

(改該方法是非功能性的,但仍然說明會導致問題的那種線路,以防其他人在工作中對此作出絆倒)

+0

這似乎有點內而外,什麼是頭文件的理由包括源文件?通常你會想要包含hpp文件的cpp文件(或者至少我會!)。 – 2011-05-25 08:27:58

+0

我不知道;我只是使用我提供的頭文件。這可能與makefile的編寫方式有關。 – Ryan 2011-05-25 08:29:45

+1

如果您在編譯時遇到多個差異錯誤,請記住您在頭文件中包含cpp。當使用不同編譯器的模板時,有時使用這種「技巧」,當有些模板支持'export'關鍵字時。 – RedX 2011-05-25 08:44:58

回答

6

您必須使用std::vector<unsigned>,而不是僅僅因爲vector<unsigned>vectorstd命名空間中聲明宣佈parent。 因此,在宣佈課程之前,您也可以使用using namespace std;

然而,大多數我認識的人會從一個頭文件中使用的第二種形式勸阻你。 有關此主題的更詳細討論,請參見the C++ FAQ

+0

謝謝,這解決了它。我認爲這應該是我寫的代碼存在的問題,但我猜老師也會犯錯誤。 – Ryan 2011-05-25 08:46:29

2

vectorstd命名空間。使用std::vector或把using namespace std;#includes後。

0

你不能在這樣的.cpp文件,並期望它的工作。該代碼是獨立編譯的,也是其他翻譯單元的一部分。當你嘗試編譯時,C++代碼被編譯 - 但你沒有包含聲明。除非類是一個模板,否則.cpp應該包含.h,而不是相反。