C++ Can';无法访问结构中的字符串

C++ Can';无法访问结构中的字符串,c++,visual-c++,C++,Visual C++,第7行-错误:此声明没有存储类或类型说明符。 我很困惑。为什么我不能访问failsafe?原因在于初始化成员,在声明成员时尝试初始化成员 const struct config{ private: std::string file; config() : file(getConfig()) {} public: std::string failsafe = file.substr(file.find("failsafe") + 12

第7行-错误:此声明没有存储类或类型说明符。 我很困惑。为什么我不能访问failsafe?

原因在于初始化成员,在声明成员时尝试初始化成员

const struct config{
    private:
        std::string file;
        config() : file(getConfig()) {}
    public:
        std::string failsafe = file.substr(file.find("failsafe") + 12);
        failsafe.resize(failsafe.find("\""));
        size_t ran, price, expiry;
    } *ini;

您的代码有几个问题。我将您的代码添加到MSVC2010中,并添加了一些伪代码(即:getConfig)来测试和修复它

  • 几乎在所有情况下,(config())。毕竟,怎么做 否则将访问它以初始化对象。我把建筑工人搬到了公共区域
  • 代码(find(),substr())必须位于函数内部。main()、对象的构造函数或某些函数/方法。我将您的代码移到构造函数中
  • 我没有添加任何东西来处理错误(比如找不到你要找的子串),但是你可以考虑添加一些代码来处理这些情况。


不能在结构声明中调用
substr
resize
之类的函数。使用构造函数来完成此操作。不能在这样的结构中运行代码。除声明字段外的所有内容都必须在函数内。
文件.substr()
行可能无法实现您的目的。如果在字符串中未找到
故障保护
,则最好存储
查找
的结果,并在执行
substr
之前检查是否找到该结果。
const struct config{
    private:
        std::string file;
        config() : file(getConfig()) {
            failsafe = file.substr(file.find("failsafe") + 12);
            failsafe.resize(failsafe.find("\""));
        }
    public:
        std::string failsafe; 
        size_t ran, price, expiry;
    } *ini;
const struct config{
private:
    std::string file;
public:
    config() : file(getConfig()) {
        failsafe = file.substr(file.find("failsafe") + 12);
        failsafe.resize(failsafe.find("\""));
    }
    std::string failsafe;
    size_t ran, price, expiry;
} *ini;