无法解析符号向量
Symbol vector could not be resolved
#include <iostream>
#include <vector>
using namespace std;
class block{
public:
long nx,ny;
vector<long> s;
block(long &x, long &y):nx(x),ny(y),vector<long> s((x+1)*(y+1),0) {}
};
int main() {
block B(2,2);
for(int i=1;i<=9;i++) {
cout<<B.s(i);
}
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
已编译和错误消息显示无法解析符号"vector"。错误是什么?我想定义一个包含要初始化的可变维度向量的类。
#include <iostream>
#include <vector>
using namespace std;
class block{
public:
long nx,ny;
vector<long> s;
block(long &x, long &y):nx(x),ny(y),s((x+1)*(y+1),0) {}
};
int main() {
block B(2,2);
for(int i=0;i<=9;i++) {
cout<<B.s[i];
}
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
块 B(2,2( 仍然有问题; 错误消息:没有构造函数"block::block"的实例与参数列表匹配
为什么?谢谢!
首先:
vector<long> s((x+1)*(y+1),0)
应该是:
s((x+1)*(y+1),0)
不应重复 s
的类型。同时,构造函数应该是:
block(const long &x, const long &y):
nx(x), ny(y), s((x + 1) * (y + 1), 0)
{
}
如果你真的需要参考。否则,当您这样做时
block B(2,2);
在 main
内部,它会给你错误,因为构造函数需要long&
,你传递的是 int 常量。关于这一点的深层原因与左值和右值有关:整数常量是右值,但是,long&
引用非常量长整型,这是左值引用。根据这个博客:左值,右值和参考
左值引用(非常量类型(是可以使用左值初始化的引用。好吧,只有那些不呈现常量或可变类型的左值。右值引用(对非 const 类型(是可以使用右值初始化的引用(同样,仅使用那些不指定常量或可变类型的右值(。对 const 类型的左值引用是可以使用 rvalues 和 lvalues 进行初始化的引用(呈现常量和非常量类型(。
此外,根据C++11标准:第4.1节标准转换:
标准转换是为内置类型定义的隐式转换。标准转换序列是以下标准转换序列 次序:
— 从以下集合进行零个或一个转换:左值到右值转换、数组到指针转换、 和函数到指针的转换。
— 从以下集合进行零个或一个转换:积分提升、浮点提升、积分 转换、浮点转换、浮点转换、指针转换、指针指向 成员转换和布尔转换。
— 零或一次资格转换。
没有右值到左值的转换。这就是您看到编译错误的原因。在long&
之前添加const
使其能够使用右值初始化,这就是更改后错误消失的原因。
其次
cout<<B.s(i);
应该是:
cout<<B.s[i];
您应该使用 []
来访问矢量元素。
第三,向量索引从0
开始,所以
for(int i=1;i<=9;i++)
应该是
for(int i=0;i<9;i++)
否则,索引越界。在此处查看工作示例:http://ideone.com/YLT3mG
block(long &x, long &y):nx(x),ny(y),vector<long> s((x+1)*(y+1),0) {}
不要在初始化列表中重复vector<long>
。也没有理由传入引用,因此请删除与号。
block(long x, long y):
nx(x), ny(y), s((x + 1) * (y + 1), 0)
{
}
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 尝试将字符串从文件读取到无符号字符向量中
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 如何使用istream_iterator将无符号字符向量转换为字符串?
- 快速将无符号字符的向量强制转换为POD结构的向量,反之亦然
- C++向量中找到重复的符号
- 将无符号字符的向量写入二进制文件 c++
- 如何确定向量的元素是否交替为符号?
- 自动符号转换,用于对类等数学向量进行操作
- 如何以精度换取速度来评估C++中两个向量的点积符号?(不特定于硬件)
- C++将向量转换为<string>无符号字符数组
- SSE2 内部函数 - 找到两个无符号短向量的最大值
- 您可以将向量<无符号字符>转换为字节[]吗?
- C++ 强制转换向量<无符号字符>到无符号字符 *
- 无符号字符迭代器的向量不起作用
- 将字符串存储在无符号长整型的向量中
- 将 int 数组值传输到无符号向量
- 无法解析符号向量
- 在类之间共享向量时,无法解析的外部符号向量