多维数组的Qt QVector

Posted

技术标签:

【中文标题】多维数组的Qt QVector【英文标题】:Qt QVector of multidimensional array 【发布时间】:2014-12-12 14:20:38 【问题描述】:

我正在尝试创建一个多维数组(C++ 数组类)的 QVector,但我遇到了麻烦

我有一个类“节点”,我想将多维数组的 QVector 作为节点类构造的参数传递,但这不起作用,我遇到了编译错误!

Class node 
    node(QVector<array<array<int, SIZE>, SIZE>> v);

有人知道我应该如何进行吗?

【问题讨论】:

什么是编译错误? @sjdowling 错误是:“预期 ')' 在 ' @vahancho 数组是 C++ 数组类 【参考方案1】:

节点(QVector, SIZE>> v);

这将在没有 C++11 及更高版本的情况下编译。你需要两种方法来解决它:

C++11 之前

node(QVector<array<array<int, SIZE>, SIZE> > v);
//                                        ^space

C++11 及后期

node(QVector<array<array<int, SIZE>, SIZE> > v);

正确,no change; it just works。将其放入您的 qmake 项目文件中:

CONFIG += c++11

但是,由于您似乎使用“C++ 数组”,您将需要后一种解决方案。换句话说,只需在构建中添加 c++11 编译支持即可。

您还有其他问题:

我不确定您从哪里得到Class 的资本概念。应该写成class

此外,您天生就需要在课程之后使用分隔符 (;)。

你最好不要在头文件中使用array,而是std::array

这是我的工作示例:

main.cpp

#include <QVector>
#include <array>

const int SIZE = 5;

class node 
    node(QVector<std::array<std::array<int, SIZE>, SIZE>> v) 
;

int main()

    return 0;

main.pro

TEMPLATE = app
TARGET = main
CONFIG += c++11
SOURCES += main.cpp

构建并运行

qmake && make && ./main

【讨论】:

【参考方案2】:

尝试在&gt;&gt; 之间添加空格。例如:

class node 
    node(QVector<array<array<int, SIZE>, SIZE> > v);//space here!
;//don't forget

你需要这个空间是因为编译器认为你想使用&gt;&gt; 操作符。

【讨论】:

错了,实际上你确实不需要在 C++11 中需要它。 @lpapp 我刚才删除了评论,因为我明白你想说什么,关于这个空间,而不是关于 std::array。是的,你是对的。 @lpapp你的答案肯定更好,我会删除我的答案,但首先我想问,为什么添加空间后,OP没有错误?如果他激活 C++11 支持,那么它应该可以正常工作吗?也许是OP的编译器规范? @Chernobyl:有人发现您的回答很有用,所以我不会删除它。 :) 我不确定 OP 使用什么编译器。 Gcc 在 4.3 中实现了直角括号,所以最早的 gcc 版本支持一些 C++11 和 VS2010 (msvc) 相同。因此,如果 std::array 有效,那也应该有效,但话又说回来,OP 可能正在使用一些不同的编译器,或者只是在不理解的情况下乱搞。也有可能他有一个非 C++11 兼容的编译器,带有数组扩展。 @user3521418:什么编译器,哪个版本,哪个平台? “激活”是什么意思?在项目文件中还是直接到编译器,其他地方?你究竟是如何启用它的?你能提供一个SSCCE吗?你能检查我的 SSCCE 是否有效吗?

以上是关于多维数组的Qt QVector的主要内容,如果未能解决你的问题,请参考以下文章

多维数组索引 C++ 中的多维数组

C 语言数组 ( 多维数组本质 | 步长角度 理解 多维数组本质 )

多维数组指向多维数组

php中多维数组的问题

如果数组存在于另一个多维数组中,如何从多维数组中删除该数组? [复制]

php 多个多维数组求交集