[英]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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.