C++ 有关结构和数组的意外错误

C++ 有关结构和数组的意外错误,c++,arrays,struct,C++,Arrays,Struct,因此,我正在关注一个特定的教程系列,并试图利用这些知识将我自己的观点放在一些类似但又不同于系列本身的东西上。在一节中,为了解决对我的问题范围不重要的某些不便,一个可能的解决方案是将某些数据块存储到结构的成员中,然后将该结构调用到函数上,该函数随后以我们想要的方式精确地输出数据-作为数组 一切都很好,直到函数出于某种原因拒绝接受数组的值,声称数组参数中的信息过载(稍后我将指定错误),并且返回的实体与函数的返回类型不匹配 这是我的密码: struct TriCoord { float Po

因此,我正在关注一个特定的教程系列,并试图利用这些知识将我自己的观点放在一些类似但又不同于系列本身的东西上。在一节中,为了解决对我的问题范围不重要的某些不便,一个可能的解决方案是将某些数据块存储到结构的成员中,然后将该结构调用到函数上,该函数随后以我们想要的方式精确地输出数据-作为数组

一切都很好,直到函数出于某种原因拒绝接受数组的值,声称数组参数中的信息过载(稍后我将指定错误),并且返回的实体与函数的返回类型不匹配

这是我的密码:


struct TriCoord
{
    float Position[3];
    int Label[2];
};

std::array<TriCoord, 3> Implement(float x, float y, float z, int j) //2
{
    float size = 1.0f;

    TriCoord f0;
    f0.Position = { x, y, z }; //1
    f0.Label = { j, 1 }; //1

    TriCoord f1;
    f1.Position = { x + 0.5, y + 0.5, z };
    f1.Label = { j, 2 };

    TriCoord f2;
    f2.Position = { x + 0.5, y, z };
    f2.Label = { j, 3 };

    return { f0, f1, f2 }; //2
};

int main()
{
    int X;
    float A[3] = Implement(3, 4, 5, 1); //3
    std::cout << A[0] << ", " << A[1] << ", " << A[2] << std::endl;
    std::cout << "Press Enter key to return" << std::endl;
    std::cin >> X;
    return 0;
}

结构三叶草
{
浮动位置[3];
int标签[2];
};
数组实现(浮点x,浮点y,浮点z,int j)//2
{
浮子尺寸=1.0f;
三叶草f0;
f0.Position={x,y,z};//1
f0.Label={j,1};//1
三叶草f1;
f1.位置={x+0.5,y+0.5,z};
f1.Label={j,2};
三色f2;
f2.位置={x+0.5,y,z};
f2.标签={j,3};
返回{f0,f1,f2};//2
};
int main()
{
int X;
浮动A[3]=机具(3,4,5,1);//3
std::cout1)一旦初始化数组,就不能将其分配到这样的数组中

int arr[3] = {1, 2, 3};    //valid

int arr2[3];
arr2 = {1, 2, 3};    //invalid
在您的情况下,您可以做的不是:-

TriCoord f0;
f0.Position = { x, y, z }; 
f0.Label = { j, 1 }; 
写:-

float tempFloat[3] = { x, y, z }; 
int tempInt[2] = { j, 1 };
TriCoord f0;
for (int i = 0; i < 3; ++i)
    f0.Position[i] = tempFloat[i];
for (int i = 0; i < 2; ++i)
    f0.Label[i] = tempInt[i];
float-tempFloat[3]={x,y,z};
int-tempInt[2]={j,1};
三叶草f0;
对于(int i=0;i<3;++i)
f0.位置[i]=临时浮点[i];
对于(int i=0;i<2;++i)
f0.标签[i]=tempInt[i];
2) 解1到解2

3) 您正在尝试将
std::array
分配给浮点数组,这肯定是不可能的


此时,我强烈建议您在任何地方都使用
std::array

浮点a[3]是一个数组,不是<代码> STD::Autho> A/Orth>,写一个超代码<>操作符,第一点,赋值操作符不能应用到数组。你需要一个类的构造函数。C++继承它的数组功能(<代码>浮点A [3 ] < /代码>类)由于这一点,它们是二级对象,而您希望使用的许多对象都不是。您通常最好使用
std::array
std::vector
std::array
与您发现的传统数组不一样。
std::cin>>X;
的目的是什么?这一点没有问题在
main()
@harper()的末尾进行感知我敢打赌这是本“教程系列”的(错误)方式教如何在程序结束后防止控制台窗口消失。谢谢。从现在起,我将尝试与std::array保持一致。我正在考虑完全放弃数组,并使用std::vectors。如果我一开始这样做,也许我可以完全回避这个问题。@AlAbrar如果你想要固定大小的小arr当然,您应该更喜欢std::array而不是std::vectors。。。