未在此范围中声明变量

Variable was not declared in this scope?

本文关键字:声明 变量 范围      更新时间:2023-10-16

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

error: ‘parent’ was not declared in this scope

我曾尝试将方法实现封装在"namespace 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];
}

(将方法更改为非功能性的,但仍然说明了会导致问题的行类型。以防其他处理任务的人偶然发现。)

必须使用std::vector<unsigned>而不是仅使用vector<unsigned>来声明parent,因为vector是在std命名空间中声明的。因此,您也可以在声明类之前使用using namespace std;

然而,我认识的大多数人都不鼓励你在头文件中使用第二种形式。有关此主题的详细讨论,请参阅C++常见问题解答。

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

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