错误:'int'之前的预期主表达式(在接受数组的函数上下文中)
error: expected primary-expression before 'int' (In the context of a function that accepts arrays)
我正在制作一个简单的控制台应用程序,该应用程序具有一个函数,该函数接受两个数组,一个数组具有一系列列宽,另一个数组为一系列字符串,然后cout的每个字符串添加空格,直到到达下一列。
我在columnizer
函数的第一行得到了一个错误:error: expected primary-expression before 'int'
。我尝试更改头文件和cpp文件中的声明,但没有成功。
这是相关代码:
//cashier.cpp
void columnizer(int sizes[], std::string values[]){
int columnCount = (sizeof sizes) / (sizeof int);
for (int i=0; i < columnCount; i++){
string value = values[i];
cout << value;
char valueLength = sizeof value / sizeof char
char extraSpace = columnSizes[i] - valueLength;
while (extraSpace > 0){
cout << " ";
extraSpace--;
}
}
}
对columnizer的调用:
//cashier.cpp
int columnSizes[5] = {7, 15, 20, 9, 9};
string headers[5] = {"Qty","ISBN","Title","Price","Total"};
...
columnizer(columnSizes, headers);
...
头文件:
//cashier.h
int cashier();
void columnizer(int sizes[], std::string values[]);
此代码充满了问题:
- 看起来像参数数组的东西实际上变成了指针
- 一条语句后缺少分号
- 同样的说法可能是不明智的:
std::string s
的长度是用s.size()
来确定的 - 名称使用不一致
这里有一种方法,你可以修补你的代码,避免明显的问题:
template <int N>
void columnizer(int (&sizes)[N], std::string (&values)[5]){
for (int i=0; i < N; i++){
std::string const& value = values[i];
std::cout << value;
char valueLength = value.size();
char extraSpace = sizes[i] - valueLength;
while (extraSpace > 0){
std::cout << " ";
extraSpace--;
}
}
}
关键的神奇之处在于可以将引用传递给数组。更有趣的是,当通过引用传递数组时,编译器可以推断出数组的大小,也就是说,不需要sizeof
-破解。为了使交易更加甜蜜,编译器将验证传递的数组是否相同。
看起来您实际上想要打印列标题,但您的代码实际上并没有打印列名。请注意,您不需要手动填充。相反,您可以根据需要设置流以填充空白,例如
std::cout << ' ' << std::setw(sizes[i]) << values[i];
可以使用操纵器std::left
和std::right
将输出放在任何填充的左侧或右侧(也可以使用std::internal
将流填充放在值内,例如符号和值之间)。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '