Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用const integer声明数组 我试图在C++中声明 int 数组,并发现了这个问题。以下代码在g++编译器上运行良好,但在Visual Studio上编译失败。我跟踪Bruce Eckel发现了这个代码 #include<iostream> int main() { const int j = std::cin.get(); char buf[j]; } #包括 int main() { const int j=std::cin.get(); char-buf[j]; }_C++_Arrays_Constants - Fatal编程技术网

使用const integer声明数组 我试图在C++中声明 int 数组,并发现了这个问题。以下代码在g++编译器上运行良好,但在Visual Studio上编译失败。我跟踪Bruce Eckel发现了这个代码 #include<iostream> int main() { const int j = std::cin.get(); char buf[j]; } #包括 int main() { const int j=std::cin.get(); char-buf[j]; }

使用const integer声明数组 我试图在C++中声明 int 数组,并发现了这个问题。以下代码在g++编译器上运行良好,但在Visual Studio上编译失败。我跟踪Bruce Eckel发现了这个代码 #include<iostream> int main() { const int j = std::cin.get(); char buf[j]; } #包括 int main() { const int j=std::cin.get(); char-buf[j]; },c++,arrays,constants,C++,Arrays,Constants,我理解,保持j只是一个int将是一个问题。由于j的值在运行时是常量,因此应该编译程序。如果我错了,请改正我。 < P>可变长度数组是C99的两个特征,并支持它们作为C++的扩展,但VisualStudio从来没有,即使它们最近是 因为你在C++中开发,除非你有充分的理由不使用它,否则就应该足够了。 < P>可变长度数组是C99的两个特征,并支持它们作为C++的扩展,但VisualStudio从来没有,即使它们最近是 因为你在C++中开发,除非你有充分的理由不使用它,否则就应该足够了。 < p>你

我理解,保持
j
只是一个
int
将是一个问题。由于
j
的值在运行时是常量,因此应该编译程序。如果我错了,请改正我。

< P>可变长度数组是C99的两个特征,并支持它们作为C++的扩展,但VisualStudio从来没有,即使它们最近是


因为你在C++中开发,除非你有充分的理由不使用它,否则就应该足够了。

< P>可变长度数组是C99的两个特征,并支持它们作为C++的扩展,但VisualStudio从来没有,即使它们最近是


因为你在C++中开发,除非你有充分的理由不使用它,否则就应该足够了。

< p>你试图定义<代码> BUF作为A。这是C(而不是C++)的一个特性,
g++
支持它作为非标准扩展。显然,您的其他编译器不支持它


我建议将
buf
转换为
std::vector
(或者实际上是
std::string
?)

您试图将
buf
定义为。这是C(而不是C++)的一个特性,
g++
支持它作为非标准扩展。显然,您的其他编译器不支持它

我建议将
buf
转换为
std::vector
(或者确实是
std::string
?)

由于在运行时,
j
的值将是
const
,因此应该编译程序

不,这里与
j
const
无关。C++目前只支持静态大小的C数组。它的大小必须是编译时常量

如果需要动态大小的数组,请使用
std::vector

默认情况下,g++编译这段代码的事实有点令人遗憾(为了兼容性)。在使用g++时,应该使用
-pedantic
标志,以确保没有启用此类编译器扩展(使用编译器扩展本身当然不错,但在这种情况下没有任何好处)

由于在运行时,
j
的值将是
const
,因此应该编译程序

不,这里与
j
const
无关。C++目前只支持静态大小的C数组。它的大小必须是编译时常量

如果需要动态大小的数组,请使用
std::vector


默认情况下,g++编译这段代码的事实有点令人遗憾(为了兼容性)。在使用g++时,您应该使用
-pedantic
标志,以确保未启用此类编译器扩展(使用编译器扩展本身当然不错,但在这种情况下没有任何好处)。

我也遇到了同样的问题。似乎很难创建其长度存储为变量的数组。我所做的是创建一个附加函数:

void Class:: initMyArray(const int size) {
    myArray = new int[size]
}

现在,你只需要调用这个函数并给它你的变量。我不确定这是否是一个合适的解决方案(虽然我不是C++专家)。

< P>我也有同样的问题。似乎很难创建其长度存储为变量的数组。我所做的是创建一个附加函数:

void Class:: initMyArray(const int size) {
    myArray = new int[size]
}

现在,你只需要调用这个函数并给它你的变量。我不确定这是否是一个合适的解决方案(虽然我不是C++专家)。您的回答非常有用。请使用
-pedantic errors
-pedantic-Werror
禁用扩展。使用
-pedantic
获取有关使用扩展的警告。谢谢。您的回答非常有用。请使用
-pedantic errors
-pedantic-Werror
禁用扩展。使用
-pedantic
获取有关使用扩展名的警告。以前曾询问过此问题。See const是意图的声明,而不是事实的创造。编译器无法在编译时神奇地确定如何在此处调整buf数组的大小。const的概念是,如果您稍后试图修改声明为const的值,则会生成一个错误,从而束缚您的纪律。有些人认为这是最好避免的拐杖。请注意,
j
不是一个常量表达式,如果您使用了
const int j=10
,它会起作用。这是以前提出过的问题。See const是意图的声明,而不是事实的创造。编译器无法在编译时神奇地确定如何在此处调整buf数组的大小。const的概念是,如果您稍后试图修改声明为const的值,则会生成一个错误,从而束缚您的纪律。有些人认为这是最好避免的拐杖。请注意,
j
不是一个常量表达式,如果您使用了
const int j=10
,它会起作用。