2012-11-06 44 views
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; 
} 
+0

不应该是'char * charArray [MAX_LINES] ...'? – Ryan

+0

或char charArray [MAX_LINES] [MAX_STRING]' –

回答

0

我猜那就是你没有指针传递到char[][],你传递一个char[][]

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

0

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

3

如果你坚持使用C兼容的字符指针,我想你会有最好的运气,使用char **作为input的类型。这是更常用的方法(至少在C中),它还有一个好处,就是不要强制你定义最大的字符串大小。

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

0

代码中很少有错误。我想你试图在Alphabetizer对象内引用主函数中的charArray。如果是这样的情况下,声明

char * input[MAX_LINES][MAX_STRING]; 

是错误的,因为上面的声明使输入(阵列的MAX_STRING(字符*)的)的MAX_LINE的阵列。总之,输入是一个数组,不是指向任何数组的指针。如果你本来打算这是一个指针 - 这是暗示我什么休息你的代码 - 那么你必须做到以下几点,

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++有意义)

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,而不是因为这可以帮助简化代码。