为什么编译器认为我没有为向量变量命名类型?
Why compiler thinks I haven't named the type for a vector var?
我试图card.h
定义一些模拟纸牌游戏的向量。我将卡秩分为向量number_ranks
和non_number_ranks
,并希望声明一个组合前面提到的两个向量的const vector<Rank> ranks
:
// "card.h" file contents (top level).
#include <vector>
using namespace std;
enum class Rank {one = 1, two, three, four, five, six, seven, eight,
nine, ten, jack, queen, king, ace};
const vector<Rank> number_ranks {
Rank::one, Rank::two, Rank::three, Rank::four, Rank::five,
Rank::six, Rank::seven, Rank::eight, Rank::nine, Rank::ten};
const vector<Rank> non_number_ranks {
Rank::jack, Rank::queen, Rank::king, Rank::ace};
vector<Rank> _tmp (number_ranks);
// ERROR ON THE LINE BELOW.
_tmp.insert(_tmp.end(), non_number_ranks.begin(), non_number_ranks.end());
const vector<Rank> ranks (_tmp);
但是,我在注释行上收到此编译器错误:
card.h|16|error: ‘_tmp’ does not name a type
但是,我在错误行之前清楚地定义了行上的_tmp
类型:
vector<Rank> _tmp (number_ranks);
为什么编译器认为我没有命名类型?
执行语句应放在函数中,例如:
vector<Rank> _tmp(number_ranks);
int main() {
_tmp.insert(_tmp.end(), non_number_ranks.begin(), non_number_ranks.end());
}
或者你可以为它定义一个特殊的函数:
vector<Rank> get_ranks() {
vector<Rank> tmp(number_ranks);
tmp.insert(tmp.end(), non_number_ranks.begin(), non_number_ranks.end());
return tmp;
}
const vector<Rank> ranks = get_ranks();
不能从顶层调用函数。
任何函数调用都应从函数内部进行。以下作品(现场:https://ideone.com/MPFhhK):
#include <stdio.h>
#include<iostream>
#include <vector>
using namespace std;
enum class Rank {one = 1, two, three, four, five, six, seven, eight,
nine, ten, jack, queen, king, ace};
const vector<Rank> number_ranks {
Rank::one, Rank::two, Rank::three, Rank::four, Rank::five,
Rank::six, Rank::seven, Rank::eight, Rank::nine, Rank::ten};
const vector<Rank> non_number_ranks {
Rank::jack, Rank::queen, Rank::king, Rank::ace};
vector<Rank> _tmp (number_ranks);
const vector<Rank> ranks (_tmp); // **ERROR ON THIS LINE**
void initialize(){
_tmp.insert(_tmp.end(),
non_number_ranks.begin(), non_number_ranks.end());
}
int main(void) {
initialize();
for( auto i=0;i<_tmp.size();i++)
std::cout<<(unsigned int)_tmp[i]<<std::endl;
return 0;
}
相关文章:
- 尝试通过多个向量访问变量时,向量下标超出范围
- 变量没有改变?通过向量的函数调用
- C++:如何读取分离变量,然后读取向量
- 在向量内更改变量的值不会改变其在向量外的值
- 将不同类型的变量添加到向量中
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- 从类指针的向量创建成员变量的向量
- 如何在C++中将字节向量(std::vector<uint8_t>)转换为不同的uint32_t,uint16_t和uint8_t变量
- 分配具有 2D 向量大小的变量的内存
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 向量索引变量声明(size_t 或 std::vector<DATATYPE>::size_type)
- 如何将向量名称用作变量?
- 遍历对象向量,并找到与从文本文件中提取的对象匹配的变量
- 如何将向量分配给参考变量?
- 如何有效地实现将向量的数据分配给多个变量?
- push_back变量向量
- 正在初始化模板化类中的私有成员变量向量
- 访问C++中的boost::变量向量的元素
- 如何公开一个返回变量向量的函数
- 如何在没有for循环的情况下请求boost::normaldistribution生成一个大的随机变量向量