错误:无效使用非静态数据成员"容量"int data[容量];
error: invalid use of non-static data member 'capacity' int data[capacity];
我不明白为什么数据是私人唯一引起我问题的变量。最初,我认为我可以通过在构造函数中首次声明变量来解决问题,但是我觉得必须有一种方法可以私下定义变量,然后将它们设置在构造函数中而不会出现任何问题。我该如何解决?另外,无效使用非静态数据存储器是什么意思?
#include <cassert>
#include <iostream>
#include <vector>
using namespace std;
class stack{
private:
int capacity;
int data[capacity];
int top;
int bottom;
public:
stack(){
top=0;
bottom=0;
capacity=100;
}
bool isEmpty(){
return top==bottom;
}
int pop(stack S){
//assert(!isEmpty());
int elem = data[top];
top--;
return elem;
}
void push(stack S,int x){
assert(top<capacity-1);
top++;
data[top]=x;
return;
}
};
int main()
{
return 0;
}
在标准C 中不允许变量长度阵列。使用动态数组,或更好的std::vector<int> data(capacity)
。
另外,您应该使用构造函数初始化器列表初始化成员变量,
stack(): capacity(100), data(capacity), top(0), bottom(0){} // assuming you use `std::vector<int> data;`
如果您不能使用std::vector
(否则您应该做的家庭作业!),则可以使用动态数组
int* data;
并将您的构造函数声明为
stack(): capacity(100), data(new int[capacity]), top(0), bottom(0){}
然后,您必须声明一个破坏者
~stack() { delete[] data;}
因此您没有内存泄漏。接下来,您还应该定义复制构造函数和分配运算符,因此事情变得有些复杂。如果可以的话,只需使用std::vector<int>
即可。
int data[capacity];
正在以 compile 时间进行操作,在capacity
具有已知值之前。
可能是最简单的解决方案,如果您必须使用数组并且所有对象都具有相同的容量(与当前构造函数一样),就是将您的变量声明更改为:
static const int capacity = 100;
将有效地将其用作编译时常数,并且您的错误消失了。
如果您仅限于数组,并且每个对象都需要一个潜在的不同容量,则通常的方法是动态分配您在构造函数中所需的内容。首先,使data
成为简单的指针:
int *data;
然后,在您的构造函数中:
top=0;
bottom=0;
capacity=100;
data = new int[capacity]; // do this to create it.
只需记住在击路仪中使用delete[] data
,并遵守3(或5个)的规则,以确保您添加其他需要的方法,例如复制/移动构造函数,并复制/移动分配运算符。没有这些,您可能会发现共享基本数据的对象,通常是非常坏主意。
但是,您应该记住,经验丰富的编码器将更有可能使用C 语言/库的全部功能,然后使用vector
。这些比数组更适合适应性,您的同事将被视为真正的C 程序员,而不是C 一个: - )
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 具有非整数边容量的最大流量的Dinic算法
- 将stl字符串缩小到小于15个字符的容量
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 在容量内调整矢量大小时的性能影响
- 收到错误"invalid use of non-static data member 'stu::n' "
- C++ 初始化 .data 部分中的变量
- 模式"allocate memory or use existing data"
- boost::asio data owning `ConstBufferSequence`
- std::vector的容量会降低吗?
- Python to C++ Data structure API
- 可视化C++载体:未使用的容量
- 如何在 c++ 中清除矢量容量?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 当我将其插入无序地图时,矢量的容量为 0
- protobuf C++ SQLite handle blob data
- 错误:字段'dateOfBirth'的类型不完整'Poco::Data::Date'
- 为什么构造函数 Message(const T&data) 与 Message(T&& data) 冲突,当 T = int&时?
- "thread-safe data"与"thread-safe code/functions"的区别
- 错误:无效使用非静态数据成员"容量"int data[容量];