为什么编译器认为我没有为向量变量命名类型?

Why compiler thinks I haven't named the type for a vector var?

本文关键字:变量 向量 类型 编译器 为什么      更新时间:2023-10-16

我试图card.h定义一些模拟纸牌游戏的向量。我将卡秩分为向量number_ranksnon_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;
}