C++程序中未知的问题:代码::块

C++程序中未知的问题:代码::块,c++,function,class,codeblocks,C++,Function,Class,Codeblocks,我正在调试一段代码。这真的很简单,但我被卡住了 以下是编译器所说的: 在函数void初始化中: 第35行错误:在“-”标记之前应为非限定id 下面是代码: #include <iostream> #include <string> #include <cmath> using namespace std; class vars { public: int coins; int coins_sec; int gtx750ti; /

我正在调试一段代码。这真的很简单,但我被卡住了

以下是编译器所说的:

在函数void初始化中:

第35行错误:在“-”标记之前应为非限定id

下面是代码:

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

class vars
{
public:

    int coins;
    int coins_sec;

    int gtx750ti;  // The amount of GTX750ti owned by the player
    int gtx760;    // The amount of GTX760 owned by the player
    int gtx770;
    int gtx780;
    int gtxtitan;
    int gtxtitanB;
    int gtxtitanZ;
    int r9270;
    int r9270x;
    int r9280;
    int r9280x;
    int r9290;
    int r9290x;
    int r9295x2;

        int gpuNames[14];       // The names of the different GPUs

    int maxPower;   // The maximum power the PSU can deliver to the components
};

void initialization()
{
        vars.gpuNames[0] = "gtx750ti";
        vars.gpuNames[1] = "gtx760";
        vars.gpuNames[2] = "gtx770";
        vars.gpuNames[3] = "gtx780";
        vars.gpuNames[4] = "gtxtitan";
        vars.gpuNames[5] = "gtxtitanB";
        vars.gpuNames[6] = "gtxtitanZ";
        vars.gpuNames[8] = "r9270";
        vars.gpuNames[9] = "r9270x";
        vars.gpuNames[10] = "r9280";
        vars.gpuNames[11] = "r9280x";
        vars.gpuNames[12] = "r9290";
        vars.gpuNames[13] = "r9290x";
        vars.gpunames[14] = "r9295x2";
}

int main()
{
    vars vars;
    initiation();
    return 0;
}

正如其他人的评论所指出的,不管大小写如何,我们都不希望类和变量具有相同的名称

此外,标识符名称区分大小写。因此,gpuNames与gpuNames不同

也就是说,我建议您将名称数组设置为静态和常量。这将允许编译器创建一个数据表,并让代码直接访问该表;不会进行任何作业

例如:

static const char * gpu_name_table[] =
{
  "gtx750ti";
  "gtx760";
    "gtx770",
    "gtx780",
    "gtxtitan",
    "gtxtitanB",
    "gtxtitanZ",
    "r9270",
    "r9270x",
    "r9280",
    "r9280x",
    "r9290",
    "r9290x",
    "r9295x2",
};
static const unsigned int number_of_gpu_names =
  sizeof(gpu_name_table) / sizeof(gpu_name_table[0]);
上面的数组习惯用法允许您添加GPU名称,而无需更改程序中的任何其他变量。_gpu_名称的变量号_由编译器赋值

vars是一个类。不能说vars.gpuNames[0]之类的东西。在初始化范围内,vars是一种类型而不是变量,并且您正在访问的成员不是静态的。为什么您认为这应该有效?要明确的是:您使用了vars作为类型和变量的名称,但类型在全局可见,而变量仅在main内部可见。gpuNames也是一个整数,您使用字符串对其赋值,这会给您带来一些编译错误,如果您得到了post,那么vars的名称将同时是一个类型和一个变量。