请帮助返回2D数组C ++

时间:2011-05-29 18:41:16

标签: c++

我正在尝试创建一个数组并将其传递给函数,然后返回它,但我不知道正确的返回方式。 我一直在寻找教程和尝试的东西,但没有设法解决这个问题。 我是C ++的新手,并认为它与Java类似,但显然它不是。

这是我得到的地方:

class MainClass {

public:
    static int countLetterCombinations(string array[], int numberOfWords) {
        // Code
        return totalCombos;
    }


    // This is the function I'm having trouble with.
    static string** sortCombos(string combinations[][3]) {
            // Do something
        return combinations; // This gives converting error.
    }

};


int main() {

// Code

int numberOfCombinations = MainClass::countLetterCombinations(words, numberOfWords);

string combinations[numberOfCombinations][3];

combinations = MainClass::sortCombos(combinations);

// Further code

}

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:9)

您需要使用vector。基于C ++堆栈的数组无法动态调整大小 - 哦,并且您无法将[][]转换为**,转换仅适用于第一维。哦,你也不能分配给数组。

简单的规则是,在C ++中,从不使用原始数组 - 它们只是令人头痛。它们是从C继承而来的,它实际上定义了许多与B源代码兼容的数组行为,这是很疯狂的。使用为您管理动态内存的类,如std::vector,用于动态可调整大小的数组。

std::vector<std::array<std::string, 3>> combinations(numberOfCombinations);

static void sortCombos(std::vector<std::array<std::string, 3>>& combinations) {
        // Do something
} // This function modifies combinations in-place and doesn't require a return.

哦,你真的没有必要让函数成为静态类成员 - 他们可以进入全局命名空间。

答案 1 :(得分:0)

您的sortCombos方法可以就地修改数组参数,调用者将直接看到这些更改。因为您不需要返回任何内容,所以应该将返回类型更改为void。

即使您可以返回输入数组,也无法分配组合。