Рейтинг:
2
David O'Neil
Гааг!!! Ричард помогал указывать дорогу. Для любого, кто придет позже, фундаментальной ошибкой было то, что он забыл дважды указать "const". Ниже приведен рабочий код, надеюсь, без косоглазия предыдущего:
#include <vector>
#include <string>
using namespace std;
class NumbersAsStrings {
private:
vector<string> stringsC;
public:
NumbersAsStrings() {
stringsC.push_back("1");
stringsC.push_back("2");
stringsC.push_back("3");
}
const string & number(int pos) const { return stringsC[pos]; }
const vector<string> & vecRef() const { return stringsC; }
const string & operator [](int pos) const { return stringsC[pos]; }
};
class ComposedClass {
private:
NumbersAsStrings numbersC;
public:
ComposedClass() {
const string & str = numbersC[0];
}
const string & getElement(int pos) {
return numbersC.number(pos);
}
const NumbersAsStrings & getStrings() { return numbersC; }
};
int main() {
ComposedClass composed;
const string & s = composed.getElement(1);
const NumbersAsStrings & strings = composed.getStrings();
const string & s1 = strings.vecRef()[0];
const string & s2 = strings[0];
return 0;
}
Рейтинг:
1
Richard MacCutchan
const string s1 = strings.vecRef[0]; //No Go
Посмотрите на определение для
vecRef
, это функция, которая возвращает ссылку на вектор, а не на строку.
const string & s2 = strings[0]; //No Go
Определение понятия
strings
является ли Постоянная ссылка на а
Strings
объект, а не массив.
Что касается остального, то я иду косоглазый, пытаясь выяснить разницу между струнами, струнами, струнами и т. д.
[редактировать]
Я подозреваю, что "у меня бин взял"
[/редактировать]
David O'Neil
&ГТ;&ГТ;строковые константы С1 = строк.vecRef[0]; //не идти
посмотрите на определение vecRef, это функция, которая возвращает ссылку на вектор, а не на строку.
Поскольку 'vecRef' возвращает ссылку на вектор, не можете ли вы использовать оператор[] для этой ссылки, чтобы добраться до отдельных строк? Вот что меня озадачивает. (Если только каким - то образом компилятор не говорит, что вектор и строки каким-то образом являются частными для исходного класса. Но код ошибки не имеет смысла в этих терминах.)
David O'Neil
Не знаю, почему вы думаете, что вас взяли, но спасибо за указатель. -5 - за это - это помогло мне получить ответ, который я опубликовал ниже. Спасибо!
Richard MacCutchan
Я так подумал из-за твоего замечания в гостиной. Если подумать, то это был серьезный (и разумный) вопрос.
David O'Neil
Как вы можете сказать, я был серьезно озадачен до вашего поста. Ошибка компилятора совсем не помогла мне, тем более что весь раздел кода, казалось, работал раньше, за исключением того, что мне пришлось переместить определение из заголовка в файл cpp! Вы не решили его, но вы, безусловно, помогли мне ускорить решение - спасибо!