好的,这个让我难过。我试图将一个字符数组数组传递给我的类的构造函数。该类具有private属性,该属性存储指向字符数组数组的指针。然后,类可以通过指针处理数组。
下面是一些演示所需功能的代码。但是,它不会编译。如何修复此代码以使其有效?
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;
}
答案 0 :(得分:3)
如果您坚持使用与C兼容的角色指针,我认为使用char **
作为input
的类型,您将获得最好的运气。这是更常用的方法(至少在C语言中),它还有一个额外的好处,就是不要强制你定义最大字符串大小。
正如其他人所指出的那样,你可以利用std::string
代替,这可能是一个更好的选择。
答案 1 :(得分:0)
我猜你没有传递指向char[][]
的指针,而是传递char[][]
。
此外,您应该使用std::string
而不是char数组。
答案 2 :(得分:0)
std::string
将是最合适的!它足够好地处理字符串和字符数组!
答案 3 :(得分:0)
代码中的错误很少。我想你试图从Alphabetizer对象里面引用main函数中的charArray。如果是这样的声明
char * input[MAX_LINES][MAX_STRING];
是错误的,因为上面的声明使得输入一个MAX_LINE数组(MAX_STRING的数组为(char *))。总之,输入是一个数组,而不是指向任何数组的指针。如果您打算将它作为指针 - 这是您的其他代码提示给我的 - 那么您必须执行以下操作,
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 ++中没有意义)
答案 4 :(得分: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,因为这可能有助于简化您的代码。