C++ 如何在c++;

C++ 如何在c++;,c++,arrays,struct,C++,Arrays,Struct,我有 错误为“分配int*时类型不兼容” 如何设置结构内部的数组?不能分配数组。但是,您可以初始化结构: struct board{ int x[3]; int y[3]; }; // in the class PatternReader board PatternReader::testPattern1DX() { struct board aBoard; int x[3] = { 1,1,1 }; aBoard = x; return aBoard;

我有

错误为“分配
int*
时类型不兼容”


如何设置结构内部的数组?

不能分配数组。但是,您可以初始化结构:

struct board{
    int x[3];
    int y[3];
};

// in the class PatternReader
board PatternReader::testPattern1DX() {
   struct board aBoard;
   int x[3] = { 1,1,1 };
   aBoard = x;
   return aBoard;
}

这将初始化
y
以及
x

不能分配数组。但是,您可以初始化结构:

struct board{
    int x[3];
    int y[3];
};

// in the class PatternReader
board PatternReader::testPattern1DX() {
   struct board aBoard;
   int x[3] = { 1,1,1 };
   aBoard = x;
   return aBoard;
}
这将初始化
y
以及
x

您的代码

board PatternReader::testPattern1DX() 
{
   board aBoard = { 
       {1, 1, 1}, 
       {2, 2, 2} 
   };
   return aBoard;
}

正在创建初始值为1,1,1的int*类型变量。然后,您试图将其分配给board类型的变量。你不想那样做。我想你打算:

int x[3] = { 1,1,1 };
aBoard = x;
请注意标题末尾的.x。然而,这仍然是错误的。不能这样分配数组。改为查找“复制数组”

老实说,我建议让board成为一个包含构造函数的类,然后你可以让构造函数按照你想要的方式工作,还可以研究重载赋值操作符。但现在,尝试从x复制到船上.x可能是您想要的。

您的代码

board PatternReader::testPattern1DX() 
{
   board aBoard = { 
       {1, 1, 1}, 
       {2, 2, 2} 
   };
   return aBoard;
}

正在创建初始值为1,1,1的int*类型变量。然后,您试图将其分配给board类型的变量。你不想那样做。我想你打算:

int x[3] = { 1,1,1 };
aBoard = x;
请注意标题末尾的.x。然而,这仍然是错误的。不能这样分配数组。改为查找“复制数组”


老实说,我建议让board成为一个包含构造函数的类,然后你可以让构造函数按照你想要的方式工作,还可以研究重载赋值操作符。但是现在,尝试从x复制到船上.x可能是您想要的。

在board结构中添加一个初始化函数:

int x[3] = { 1,1,1 };
aBoard.x = x;

将初始值设定项函数添加到board结构:

int x[3] = { 1,1,1 };
aBoard.x = x;

无法分配原始数组。改为使用
std::array
。或者如果您不能使用C++11或Boost,那么
std::copy
应该起作用。您不能分配原始数组。使用<代码> STD::数组< /COD>。或者如果你不能使用C++ 11或Booost,那么代码> STD::复制< /代码>应该做这个把戏。@ Teon是C++ 2003的有效代码,因为板是一个集合。嗯,下次我应该做研究,谢谢指正,评论删除直接初始化变量,与其初始化一个单独的变量,然后执行赋值,这是正确的做法。但是,最好避免使用原始数组,而是使用
std::array
。这个答案仍然是在用“代码> STD::Stabase<代码>替换原始数组之后生效的。@ Teon是C++ 2003的有效代码,因为板是一个集合。嗯,下次我应该做LOL研究,谢谢指正,注释删除直接初始化变量,而不是初始化一个单独的变量,然后执行一个赋值,这是正确的做法。但是,最好避免使用原始数组,而是使用
std::array
。在将原始数组替换为
std::array
“正在创建int*类型的变量”之后,此答案仍然有效。否,数组和指针不相同。该变量实际上是一个数组,其类型为“3整数数组”。如果它真的是一个指针,那么这是合法的:
intx[3]={1,1,1};x=零PTR感谢您确保技术资料准确无误。是的,数组和指针并不完全相同。我使用术语“int*”,因为在代码
中=x它试图从x向int*赋值,因此出现错误:“int*赋值中的不兼容类型”正在创建int*类型的变量。不,数组和指针不相同。该变量实际上是一个数组,其类型为“3整数数组”。如果它真的是一个指针,那么这是合法的:
intx[3]={1,1,1};x=零PTR感谢您确保技术资料准确无误。是的,数组和指针并不完全相同。我使用术语“int*”,因为在代码
中=x它试图从x向int*赋值,因此出现错误:“int*赋值中的不兼容类型”