C++报错expected primary-expression before ‘]’ token 向量相加代码排查
C++向量相加代码错误排查与修正
你遇到的expected primary-expression before ‘]’ token报错直接来源于return vector_add_result[]行,C++语法不允许空的下标运算符[],即使补充索引也只能返回单个double值,无法直接返回整个数组,这只是代码中的问题之一,所有错误整理如下:
- 头文件引入语法错误:
#include语句结尾不能加分号,所有头文件行末尾的;都要删除 - 函数参数定义错误:
vector_add声明的参数是两个double类型的单个值,但是调用时传入的是二维数组,且函数内部直接访问了仅在main函数作用域有效的vector1、vector2变量,属于非法访问 - for循环语法错误:循环条件的分隔符应该是分号,正确写法为
for (int i=0; i<3; i++) - 数组定义错误:
double add_result[3][0]的第二维长度为0,属于非法定义,应该改为double add_result[3][1] - 函数调用与返回值逻辑错误:你定义的函数名为
vector_add,调用时却写了vector_add_result,且C++不支持直接返回栈上分配的原生数组 - 输出逻辑错误:不能直接用
std::cout输出整个数组,需要逐个输出三个分量
修正后的可运行代码
#include<iostream> #include<cmath> #include<string> // 将结果数组作为参数传入函数修改,避免返回数组的问题 void vector_add(double vectorA[3][1], double vectorB[3][1], double result[3][1]) { for (int i=0; i<3; i++) { result[i][0] = vectorA[i][0] + vectorB[i][0]; } } int main () { double vector1[3][1]; std::cout<<"Input vector1 x:"<<std::endl; std::cin>>vector1[0][0]; std::cout<<"Input vector1 y:"<<std::endl; std::cin>> vector1[1][0]; std::cout<<"Input vector1 z:"<<std::endl; std::cin>> vector1[2][0]; double vector2[3][1]; std::cout<<"Input vector2 x:"<<std::endl; std::cin>>vector2[0][0]; std::cout<<"Input vector2 y:"<<std::endl; std::cin>> vector2[1][0]; std::cout<<"Input vector2 z:"<<std::endl; std::cin>> vector2[2][0]; double add_result[3][1]; vector_add(vector1, vector2, add_result); std::cout<<"vector addition result: x="<<add_result[0][0] <<" y="<<add_result[1][0]<<" z="<<add_result[2][0]<<std::endl; return 0; }
内容的提问来源于stack exchange,提问作者QUTADAH
相关产品推荐
相关产品推荐

