我正在尝试创建一个数组并将其传递给函数,然后返回它,但我不知道正确的返回方式。 我一直在寻找教程和尝试的东西,但没有设法解决这个问题。 我是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
}
任何人都知道如何解决这个问题?
答案 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。
即使您可以返回输入数组,也无法分配组合。