Der*_*rek 5 c++ arrays compiler-errors private-members
我有一个类,并且该类的输入的一部分是可变长度的向量(称为数据)(假设它具有长度N).我在功能后包含了这个:
N = data_->size();
Run Code Online (Sandbox Code Playgroud)
在类的私有部分,我想声明一个数组double A[N][N];.但是,当我尝试这样做时,我会说些什么
错误:"N不是类型名称,静态或枚举器".
如何创建阵列A[N][N]?
对不起,如果已经在其他地方解释过,因为我对c ++很新,所以甚至不知道该找什么!
编辑 - 附加代码:
class foo {
public:
foo (std::vector &data)
: data(data_)
{
N = data_->size();
M = /* four times the last member of data (which is a vector of positive integers)*/
}
private:
double A[M][M];
void foo(void)
{
for (std::size_t i=1; i<=M; ++i)
{
A[i][i] = 1;
}
}
};
Run Code Online (Sandbox Code Playgroud)
希望有某种意义......我怎么能定义A [M] [M]?也许它不可能为M做,因为M是数据的函数.如果M不可能,N可能吗?
我能想到的一个可能性是,我可以制作A a std::vector< std::vector<double> > A然后将很多0或其他东西压入其中,然后修改值......
小智 5
如果您使用std :: vector类,则必须使用以下句子在data_类的函数中创建向量(例如构造函数):
A = vector<vector<double> >(N, vector<double>(N, 0));
Run Code Online (Sandbox Code Playgroud)
括号的第一个参数是向量的大小,第二个是它上面的数据类型.
对不起我的英语,我是西班牙语,我的英语不是很好.
嗯...这里有几个问题...
N均未M声明(在构造函数中或作为 的成员foo)data您正在尝试初始化未声明的成员(您可能的意思data_(data)是语法是member(expression),而不是expression(member))std::vector< sometype >; 如果你希望它是通用的,你需要使用模板或从 boost 获得一些帮助A)void foo(void)是一个问题,因为它不是构造函数(没有类型)的正确语法,而是使用类名让我们构建更接近您想要的东西
从一堂课开始foo:
class foo {
};
Run Code Online (Sandbox Code Playgroud)
构造函数采用单个类型参数std::vector<double>
class foo {
public:
foo(std::vector<double> &data);
};
Run Code Online (Sandbox Code Playgroud)
你想用数据初始化一个成员变量
class foo {
private:
std::vector<double> data_;
public:
foo(std::vector<double> &data)
:data_(data)
{};
};
Run Code Online (Sandbox Code Playgroud)
在这一点上,我会注意到,我通常不会将非平凡构造函数的定义放在类声明中,而是放在实现文件中,因此我可以将成员变量的声明放在公共部分下面与构造函数的声明。但为了简洁起见,我将在这里保留这种方式。
您想要捕获并存储数据的大小
class foo {
private:
std::vector<double> data_;
size_t N;
public:
foo(std::vector<double> &data)
:data_(data)
,N(data.size())
{};
Run Code Online (Sandbox Code Playgroud)
};
此时,我们还没有制作出您想要的多维存储,但是现在您需要做出一些有关如何管理存储的决定。如果你使用Kerrek SB 的方法,这看起来像
class foo {
private:
std::vector<double> data_;
size_t N;
std::vector< std::vector<double> > A;
public:
foo(std::vector<double> &data)
:data_(data)
,N(data.size())
,A()
{
A.resize(N);
for (size_t i=0; i<N; ++i) {
A[i].resize(N);
}
};
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1725 次 |
| 最近记录: |