繁体   English   中英

为什么编译器认为我没有为vector var指定类型?

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

我正在尝试在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;
}

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM