【问题标题】:Unknown issue in a C++ program using Code::Blocks使用 Code::Blocks 的 C++ 程序中的未知问题
【发布时间】:2015-01-18 19:50:38
【问题描述】:

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

编译器是这样说的:

在函数void initialization()

第 35 行错误:在 '-' 标记之前预期的 unqualified-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;
}

【问题讨论】:

  • vars 是一个类。你不能说像vars.gpuNames[0]这样的东西。
  • initialization() 的范围内varstype 而不是variable 并且您访问的成员不是static。为什么你认为这应该有效?
  • 明确一点:您使用vars 作为both 类型 变量的名称——但类型是可见的全局,而变量仅在 main 内部可见。
  • gpuNames 也是一个整数,你用字符串分配它,这应该会给你一些编译器错误,如果你把 vars 的混淆名称作为一个类型和同时是一个变量。

标签: c++ function class codeblocks


【解决方案1】:

正如其他人的 cmets 所说,无论大小写如何,都不希望有同名的类和变量。

此外,标识符名称区分大小写。因此“gpuNames”不同于“gpunames”。

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

例子:

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 名称,而无需更改程序中的任何其他变量。变量number_of_gpu_names 由编译器赋值。

【讨论】:

    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 2022-12-04
    • 2010-11-25
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多