尝试在函数内初始化全局c ++矩阵(2D数组)时出现此问题:
这就是我正在做的事情
#include <iostream>
#include <math.h>
#include <Windows.h>
using namespace std;
float matrix[5][5];
void setIR(){
matrix[5][5]= {
{ 17.2, 22.75, 2.5, -9.15, 0.2},
{ 22.75, 145.5, 9.25, 20.75, 5.25 },
{ 2.5, 9.25, 76.5, -15.5, -6.0 },
{ -9.15, 20.75, -15.5, 37.3, -25.65 },
{ 0.2, 5.25, -6.0, -25.65, 41.2 }
};
int main(){
//rest of the code
......
}
我只得到一堆
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(46): error C2059: syntax error : '{'
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(46): error C2143: syntax error : missing ';' before '{'
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(47): error C2143: syntax error : missing ';' before '}'
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(47): error C2143: syntax error : missing ';' before ','
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(48): error C2143: syntax error : missing ';' before '{'
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(48): error C2143: syntax error : missing ';' before '}'
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(48): error C2143: syntax error : missing ';' before ','
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(49): error C2143: syntax error : missing ';' before '{'
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(49): error C2143: syntax error : missing ';' before '}'
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(49): error C2143: syntax error : missing ';' before ','
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(50): error C2143: syntax error : missing ';' before '{'
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(50): error C2143: syntax error : missing ';' before '}'
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(50): error C2143: syntax error : missing ';' before ','
1>c:\users\apple\documents\visual studio 2010\projects\jcb\jcb\jcbPIO.cpp(51): error C2143: syntax error : missing ';' before '{'
1>c:\users\apple\documents\visual studio2010\projects\jcb\jcb\jcbPIO.cpp(51): error C2143: syntax error : missing ';' before '}'
我做错了或C ++限制?
答案 0 :(得分:2)
您只能在初始化时使用{}
初始化语法,并且只能在其定义中初始化全局变量。
对于这种情况,您可以初始化不同的矩阵,然后只复制内容:
void setIR(){
static const float init[5][5]= {
{ 17.2, 22.75, 2.5, -9.15, 0.2},
{ 22.75, 145.5, 9.25, 20.75, 5.25 },
{ 2.5, 9.25, 76.5, -15.5, -6.0 },
{ -9.15, 20.75, -15.5, 37.3, -25.65 },
{ 0.2, 5.25, -6.0, -25.65, 41.2 }
};
memcpy(matrix, init, sizeof(matrix));
}
如果您不喜欢memcpy
之类的东西,那么您可以通过循环手动复制,或尝试使用STL,但在我看来,这是这种情况下最简单,最简短的解决方案。
答案 1 :(得分:0)
此“列表分配”语法仅适用于初始化(即,在您定义变量的位置),而不适用于赋值。您的赋值语句尝试执行的操作是将单个元素matrix[5][5]
(实际上不存在)分配给花括号列表给出的值,该值不是值的有效语法。
您可以按如下方式分配矩阵:
float matrix[5][5];
void setIR()
{
static float const values[5][5]= {
{ 17.2, 22.75, 2.5, -9.15, 0.2},
{ 22.75, 145.5, 9.25, 20.75, 5.25 },
{ 2.5, 9.25, 76.5, -15.5, -6.0 },
{ -9.15, 20.75, -15.5, 37.3, -25.65 },
{ 0.2, 5.25, -6.0, -25.65, 41.2 }
};
for (int i = 0; i < 5; ++i)
for (int j = 0; j < 5; ++j)
matrix[i][j] = values[i][j];
}
当然,鉴于您的值无论如何都是常量,最好的解决方案是在matrix
本身的定义中给出它们。这也节省了复制所有数据的时间。