变量未在此范围内声明?

时间:2011-05-25 08:25:57

标签: c++

我在几个变量的几个方法中得到了这个错误(所有这些都是向量):

error: ‘parent’ was not declared in this scope

我尝试将我的方法实现包装在"命名空间DisjointSubsets {...}"中,但这会导致其他问题。它似乎只对矢量执行此操作,并且我尝试添加" #include矢量"在cpp文件的开头,它没有改变任何东西。

这是头文件:

#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];
}

(将方法更改为不起作用,但仍然说明会导致问题的那种行。以防万一其他人在工作中遇到这个问题。)

3 个答案:

答案 0 :(得分:6)

您必须使用std::vector<unsigned>而非vector<unsigned>来声明parent,因为vector名称空间中已声明std。 因此,您也可以在声明课程之前使用using namespace std;

但是我认识的大多数人都不鼓励你在头文件中使用第二种形式。 有关此主题的更详细讨论,请参阅the C++ FAQ

答案 1 :(得分:2)

vector位于std命名空间中。使用std::vector或在using namespace std;之后添加#includes

答案 2 :(得分:0)

您不能包含这样的.cpp文件,并希望它能够正常运行。该代码是独立编译的,也是其他翻译单元的一部分。当您尝试编译时,C ++代码已编译 - 但您没有包含声明。除非类是模板,否则.cpp应该包含.h,而不是相反。