2009-08-05 1 views
1

Я не понимаю, почему следующее не удается:почему указатель на массив не возвращается, как **

#include<string> 
class Foo 
{ 
    public: 
    std::string** GetStr(){return str;}  

private: 
    std::string * str[10]; 
}; 

Благодарности

+1

Что это не может сделать? Он компилируется для меня. –

+0

да ... это тоже для меня, у меня был другой тип данных – vehomzzz

+1

, тогда если он все еще не работает, обновите свой вопрос, чтобы включить ваш точный код с вашими типами. –

ответ

1

Во-первых, вы отметите это как C++ и C. Что это? C не имеет строкового класса. Если это C++, удалите тег C, он вводит в заблуждение (они не являются одним и тем же языком!).

Редактировать: Я неправильно понял, что вы пытаетесь сделать. Ваш метод должен компилироваться. Вам просто нужно помнить о разыменовании возвращенной строки, чтобы получить строку.

Я редко иметь дело с двойной косвенностью, но вы должны сделать что-то вроде этого, чтобы установить строку:

*(*str) = "STR"; //or 
*(str[i]) = "STR"; 

Я не знаю, как вы будете использовать оператор адреса здесь, потому что он возвращает ссылку а не указатель.

установить строку в массиве str. Ваш метод действительно странный. Проблема в том, что компилятор не знает, что вы хотите разыменовать строку, поэтому она пытается разыменовать char *.

Я не понимаю, почему вы хотите сделать это таким образом. Было бы лучше сделать это:

std::string str[10]; 
std::string* GetStr() { return str; } 
+0

удалил тег «C». Вы можете сделать это с помощью w/rep> = 500. – azheglov

+0

Я поставил строку * str [] для целей, я использую разные классы в моем случае – vehomzzz

+0

yes ... Хорошая точка, это вопрос C++, заданный строковыми классами ... хотя Правило Я заинтересован в обоих языках. – vehomzzz

Смежные вопросы