1

好吧,这个让我难住了。我正在尝试将一组字符数组传递给我的类的构造函数。该类有一个私有属性,它存储一个指向字符数组数组的指针。然后该类可以通过指针处理数组。

下面是一些演示所需功能的代码。但是,它不会编译。如何修复此代码以使其正常工作?

using namespace std;

const int MAX_LINES = 10, MAX_STRING = 80;

class Alphabetizer{
    public:
        Alphabetizer(char * inArray[][MAX_STRING]) : input(inArray){};

    private:
        char * input[MAX_LINES][MAX_STRING];
};

int main(){
    char charArray[MAX_LINES][MAX_STRING];
    Alphabetizer theAlaphBet(charArray);
    return 0;
}
4

5 回答 5

3

如果您坚持使用与 C 兼容的字符指针,我认为使用 achar **作为input. 这更像是执行此操作的常用方法(至少在 C 中),并且它具有不强制您定义最大字符串大小的额外好处。

正如其他人指出的那样,您可以利用std::string它,这可能是一个更好的选择。

于 2012-11-06T04:35:07.263 回答
0

没有看到编译错误很难说,但我认为问题可能出在这一行:

Alphabetizer theAlaphBet(charArray);

您直接传递数组而不是它的地址。它应该是:

Alphabetizer theAlaphBet( &charArray );

但是,我认为您可能使事情过于复杂。使用引用而不是指针可能会更好:

const int MAX_LINES = 10, MAX_STRING = 80;

class Alphabetizer{
    public:
        Alphabetizer(char & inArray[][MAX_STRING]) : input(inArray){};

    private:
        char & input[MAX_LINES][MAX_STRING];
};

int main(){
    char charArray[MAX_LINES][MAX_STRING];
    Alphabetizer theAlaphBet(charArray);
    return 0;

}

您可能还想考虑使用 std::string 代替,因为这可能有助于简化您的代码。

于 2012-11-06T12:59:56.027 回答
0

代码中几乎没有错误。我想您正试图从 Alphabetizer 对象内部引用主函数中的 charArray。如果是这种情况,则声明

char * input[MAX_LINES][MAX_STRING];

是错误的,因为上面的声明使输入的 MAX_LINE 数组((char*)的 MAX_STRING 数组)。总之,输入是一个数组,而不是指向任何数组的指针。如果您打算将它作为一个指针 - 这是您的代码的其余部分向我提示的内容 - 那么您必须执行以下操作,

const int MAX_LINES = 10, MAX_STRING = 80;

class Alphabetizer{
    public:
        Alphabetizer(char ((*ar)[MAX_LINES])[MAX_STRING]) : m_ar(ar){};

    private:
        char ((*m_ar)[10])[80];
};

int main(){
    char charArray[MAX_LINES][MAX_STRING];
    char ((*ar)[MAX_LINES])[MAX_STRING] = &charArray;
    Alphabetizer theAlaphBet(&charArray);
    return 0;
}

此外,

input(inArray)

是错误的,因为它相当于执行以下操作,

char a[1] = {'a'};
char b[1] = {'p'};
a = b;

将一个数组分配给另一个数组不会将一个数组复制到另一个数组。你必须做明确的 memcpy。(这种语义在 c 或 c++ 中没有意义)

于 2012-11-06T06:20:57.833 回答
0

我猜这是您没有传递指向 的指针char[][],而是传递了char[][].

此外,您应该使用std::string而不是 char 数组。

于 2012-11-06T04:27:55.800 回答
0

std::string将是最合适的!它可以很好地处理字符串和字符数组!

于 2012-11-06T04:29:53.133 回答