【问题标题】:Expected primary-expression before '{' token error'{' 标记错误之前的预期主表达式
【发布时间】:2017-09-24 21:30:54
【问题描述】:

Followed 代码可以在 Eclipse 中正常运行,但是当我在 Dev C++ IDE 上运行时,出现了跟踪错误;

City.cpp:6: error: '{' token 之前的预期主表达式

City.h

#include <string>

using namespace std;

#ifndef CITY_H
#define CITY_H

class City
{
    public:
        City();
        string arrCity[10];
};

#endif // CITY_H

City.cpp

#include <string>
#include "City.h"

City::City()
{
    arrCity[10] = {"Tbilisi", "Batumi", "Kutaisi", "Gori", "Poti"};        
}

【问题讨论】:

  • 不幸的是,我仍然遇到同样的错误..
  • 是的,这是一个切题。宋元瑶的回答是正确的——如果它不起作用,我们会丢失你的一些信息。您使用的编译器的版本和标志是什么?
  • 我的 Dev C++ 使用 mingw32 v3.4.2
  • 在您的情况下(C++03),您必须分别初始化每个数组成员,即 a[0] = x, a[1] = y。或者,更好的是,升级到 C++11。

标签: c++ arrays initialization dev-c++ c++03


【解决方案1】:

arrCity[10] = {"Tbilisi", "Batumi", "Kutaisi", "Gori", "Poti"}; 没有达到您的预期。它试图通过花括号初始化列表分配arrCity[10](即std::string);那是行不通的。它已经超出了数组的范围。

注意数组不能直接赋值,可以使用member intializer list来初始化:

City::City() : arrCity {"Tbilisi", "Batumi", "Kutaisi", "Gori", "Poti"}
{
}

或使用默认成员初始化器:

class City
{
    public:
        City();
        string arrCity[10] = {"Tbilisi", "Batumi", "Kutaisi", "Gori", "Poti"};
        // or
        string arrCity[10] {"Tbilisi", "Batumi", "Kutaisi", "Gori", "Poti"};
};

请注意,以上两种解决方案都需要 C++11 支持,否则,您可能需要在构造函数的主体中一个一个地分配每个元素。

【讨论】:

  • 首先,感谢您的帮助,不幸的是它不起作用。它还返回了新的错误 City.cpp: In constructor City::City()': City.cpp:4: error: expected (' before '{' token City.cpp:4: 被之前的错误弄糊涂了,退出
  • @GoranZooferic DEMO 你的编译器支持 C++11 吗?
猜你喜欢
  • 2013-01-13
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多