未在此范围中声明变量
Variable was not declared in this scope?
我在几个变量(都是向量)的几个方法中得到了这个错误:
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,而不是相反。
相关文章:
- 在疯狂的部分中声明变量
- 如何在C++中为高分辨率时钟声明变量?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- CUDA 的性能取决于声明变量
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- C++声明变量时自动类型推断而不初始化
- 在不同循环中多次声明变量的优点
- 奇怪的错误 C2131 与 constexpr 声明变量
- 是否可以在 "if" 语句中声明变量?
- 在python-ctypes中声明变量并传递给dll函数
- 在递归函数C++中声明变量
- 只有一个定义/声明时标头声明变量的多堆定义错误
- 奇怪的未声明变量编译器错误
- 我在C++程序中声明变量时遇到问题
- 在命名空间中声明变量
- C++ lambda 按值捕获,而无需更早声明变量
- 声明变量以保存字符串列表时的内存分配
- 如何声明C 变量应突变
- 为什么允许在开关语句中声明变量?但不是声明 初始化
- 在同一命名空间中声明变量和函数是否出错?[C++]