在类中初始化QHash

内尔达夫

我想QHash<...>在一个类内初始化一个如果代码是在Linux上使用gcc编译的,则没有问题。但是,如果我使用MSVC12,则会出现以下错误:

C2661:QHash <...> :: QHash:没有重载函数需要X参数

最小示例:

测试类

#ifndef TESTCLASS_H
#define TESTCLASS_H

#include <QHash>
#include <QString>

class TestClass
{
public:
    TestClass();

    QHash<QString, QString> myHash = {{"Hi", "Hello"},
                                      {"test", "Test"}};
};

#endif // TESTCLASS_H

测试类

#include "testclass.h"

TestClass::TestClass()
{

}

main.cpp

#include <QCoreApplication>
#include <QDebug>

#include "testclass.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    TestClass test;
    qDebug() << test.myHash;

    return a.exec();
}

无题

QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

DEFINES += Q_COMPILER_INITIALIZER_LISTS

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += main.cpp \
    testclass.cpp

HEADERS += \
    testclass.h

你们中有人知道为什么MSVC会引发此编译器错误以及如何避免该错误吗?

0xbaadf00d

试试这个代码;如果它不起作用,则说明您的编译器不支持C ++ 11,或者您没有指定正确的编译器标志来启用它。

#include <vector>
#include <iostream>

const std::vector<int> numbers = {1, 2, 3};

int main()
{
    for(auto num: numbers)
    {
        std::cout << num;
    }
}

编译器标志可能是-std = c ++ 11,但是我不确定MSVC12

编辑

我无权访问MSVC12,您可以尝试这些吗?我认为它不完全支持C ++ 11

测试1

#ifndef TESTCLASS_H
#define TESTCLASS_H

#include <QHash>
#include <QString>

QHash<QString, QString> const myHash = {{"Hi", "Hello"},
                                        {"test", "Test"}};

class TestClass
{
public:
    TestClass();
};

#endif // TESTCLASS_H

测试2

#ifndef TESTCLASS_H
#define TESTCLASS_H

#include <vector>


class TestClass
{
public:
    TestClass();

    const std::vector<int> numbers = {1, 2, 3};
};

#endif // TESTCLASS_H

编辑

由于测试1可以正常工作,而测试2不能正常工作,因此MSVC12对C ++ 11的支持确实有些奇怪。

C ++ 11指出应允许您在头文件中初始化类成员变量,但MSVC似乎不支持此功能。至少对于初始化列表。

在您最初的问题中,QHash是const,现在我不确定您要实现的目标是什么,但是我很确定您需要更多的const,或者可以将QHash作为X.cpp文件中的常数。你有。也许QHash中的字符串也应该是const?

但这超出了这个问题的范围,也许对此有所考虑?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

初始化类中的静态指针

来自分类Dev

在类的初始化和初始化列表中

来自分类Dev

如果成员是模板类,则在初始化列表中初始化某个类的成员

来自分类Dev

在类php中初始化实例

来自分类Dev

Spring中的条件类初始化

来自分类Dev

在python中创建无法初始化但其子类可初始化的类的最佳方法

来自分类Dev

在类的成员初始化器列表中初始化std :: tuple

来自分类Dev

PyGObject中的类初始化

来自分类Dev

为什么不能在类的构造函数的初始化列表中初始化ifstream?

来自分类Dev

在初始化列表中初始化类数组C ++

来自分类Dev

类初始化中的可选参数

来自分类Dev

.NET中的静态类初始化

来自分类Dev

Python中的类初始化

来自分类Dev

初始化程序不会覆盖其父类中的指定初始化程序

来自分类Dev

Swift中的类初始化

来自分类Dev

是否可以在类初始化之前填充const QHash(或类似的东西)?

来自分类Dev

C ++在初始化列表中的基类初始化之前调用函数

来自分类Dev

Python使用初始化文件和默认常量文件中的变量初始化类

来自分类Dev

在Swift中初始化类常量

来自分类Dev

初始化在模板化父类中定义的结构

来自分类Dev

在C ++中编写初始化类

来自分类Dev

Swift类中的初始化器

来自分类Dev

初始化类中的向量

来自分类Dev

Python中的类初始化

来自分类Dev

类的实例未在类中初始化IBOutlets

来自分类Dev

结构或类中的数组初始化

来自分类Dev

在类中初始化向量

来自分类Dev

在类本身中初始化 TypeScript 变量与在构造函数中初始化的区别

来自分类Dev

在 C# 中,类的属性是并发初始化还是顺序初始化?