Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
C++ 循环c+中的结构+;_C++_Visual Studio 2012_C++11_Struct - Fatal编程技术网

C++ 循环c+中的结构+;

C++ 循环c+中的结构+;,c++,visual-studio-2012,c++11,struct,C++,Visual Studio 2012,C++11,Struct,我想知道是否有可能将struct放在for循环中,而不是一个变量,我从答案中读到,但无法进行思考,下面是代码: for(struct { int a; char b; } s = { 0, 'a' } ; s.a < 5 ; ++s.a) { std::cout << s.a << " " << s.b << std::endl; } 如何使代码工作在C++ 11、Visual Studio 2012?作为注释指出,用你所做的,一

我想知道是否有可能将struct放在for循环中,而不是一个变量,我从答案中读到,但无法进行思考,下面是代码:

for(struct { int a; char b; } s = { 0, 'a' } ; s.a < 5 ; ++s.a) 
{
    std::cout << s.a << " " << s.b << std::endl;
}

如何使代码工作在C++ 11、Visual Studio 2012?

作为注释指出,用你所做的,一些编译器可能不完全给出你想要的结果。 如果您只是试图将

结构或变量类型的范围限制在有限的区域(无需进入其他函数等),您可以在代码周围添加一些额外的括号,例如:

{ // scope start
struct X { int a; char b; };
for(X s = { 0, 'a' } ; s.a < 5 ; ++s.a) 
{
    std::cout << s.a << " " << s.b << std::endl;
}
} // scope end .. struct X no longer 'visible'
{//scope start
结构X{int a;char b;};
对于(xs={0,'a'};s.a<5;++s.a)
{
std::cout我的建议:

struct X
{
    X(int a_, char b_)
        : a(a_), b(b_)
    {}
    int a; char b;
};

for(X s(0, 'a'); s.a < 5 ; ++s.a)
{
    std::cout << s.a << " " << s.b << std::endl;
}
struct X
{
X(int a_uux,char b_uux)
:a(a_uu),b(b_u)
{}
int a;char b;
};
对于(X s(0,'a');s.a<5;+s.a)
{

std::cout您可以使用
std::tuple
():

#包括
对于(std::tuple s(0,'a');std::get(s)<5;++std::get(s))
{

std::cout如果有帮助,它可以工作是的,我也尝试在线编译它工作…似乎我的计算机上的某些东西不工作…thnxI没有Visual Studio进行测试,但您是否尝试按照错误提示添加标记名?(例如,
struct s_u{…}s=…
)是的,然后这些错误消失了,但仍然会出现其他错误…当您定义struct out-of-loop时,您不必输入标记名。我也没有Visual Studio可供测试,但在g++上,以下选项起作用(除了问题中的on):
for(struct X{int a;char b;}s={0,'a'};s.a<5;++s.a){…}
struct X{int a;char b;};for(xs={0,'a'};s.a<5;++s.a){…}
注意,在最后一个问题上,变量仍然是循环的局部变量(但X类型不是)。这在Visual Studio 2012中不起作用。您不能使用
s={0,'a'}
。我得到了
1>Cpp Test Cpp(20):error C2143:语法错误:missing'),在“{'
之前的“for”-行。@TobiMcNamobi完全正确。值得一提的是,它在Visual Studio 2013中确实有效。由于问题被特别标记为
Visual Studio 2012
,为什么您会给出一个未使用该特定IDE测试的答案?如果
s{0,'a',则有效
在VS2012中被替换为
s(0,'a')
。@TobiMcNamobi您能用您定义的结构发布完整的代码吗?这在vs12上不能像我一样工作see@tonni好的,我会做的已经在我给自己的答案中了。为了使Danvils的答案有效,你不能使用初始值设定项列表(即使用
()
而不是
{}
用于初始化
s
)和包含元组
#当然包括
。@BartvanNierop:因为“不确定”!=“不起作用”;)
{ // scope start
struct X { int a; char b; X(int z, char y) : a(z), b(y) {} };
for(X s(0, 'a') ; s.a < 5 ; ++s.a)
{
    std::cout << s.a << " " << s.b << std::endl;
}
} // scope end .. struct X no longer 'visible'
struct X
{
    X(int a_, char b_)
        : a(a_), b(b_)
    {}
    int a; char b;
};

for(X s(0, 'a'); s.a < 5 ; ++s.a)
{
    std::cout << s.a << " " << s.b << std::endl;
}
#include <tuple>

for(std::tuple<int,char> s(0,'a'); std::get<0>(s) < 5 ; ++std::get<0>(s)) 
{
    std::cout << std::get<0>(s) << " " << std::get<1>(s) << std::endl;
}