base operand of '->' has non-pointer type (проблема с классами.)

Модератор: Модераторы разделов

KukMan
Сообщения: 92
ОС: Kubuntu 7.10

base operand of '->' has non-pointer type

Сообщение KukMan »

Есть такая очеень тривиальная задача. Есть клас, ему передается значение при помощи конструктора. и есть метод класа, который это значение возвращает в типе string. Вот код:

Код: Выделить всё

#include <string>
#include <iostream>

class String2 : std::string {
public:
String2(std::string s) {
    string = s;
}
String2() {
    string = "";
}
std::string getCurrentString() {
    return string;
}
private:
    std::string string;
};

int main() {
    String2 st("Lol");
    std::string string = st->getCurrentString();
    std::cout << string;
return 0;
}


Но как я ни старался - эта программа все равно не компилируется. Говорит - base operand of '->' has non-pointer type 'String2'
Как осуществить данную задачу? (мож вобще не так делаю)...

З.Ы. Оффтоп: почему ,если програмировать в QDevelop, то создается nameofclass.h и nameofclass.cpp. в *.h определяются функции, а в *.cpp они описываются. Для чего такой гиммор? почему нельзя описывать методы класса в *.h???
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: base operand of '->' has non-pointer type

Сообщение serzh-z »

st не является указателем. "st.getCurrentString()" поможет.
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: base operand of '->' has non-pointer type

Сообщение KukMan »

спс. заработало. еще один вопрос. вот тут у меня функция возвращает переменную типа string. А в QLineEdit->setText используется переменная типа QString. Как сделать, чтобы возврат функции getCurrentString поставить как текст в QLineEdit??? lineedit->setText(tr(st.getCurrentString())); не работает. Пишет, что ошибочный тип - string
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: base operand of '->' has non-pointer type

Сообщение serzh-z »

"lineedit->setText(str.c_str())", QLineEdit::setText() ожидает QString, у которого, в свою очередь, есть конструктор для параметра "char *".
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: base operand of '->' has non-pointer type

Сообщение KukMan »

А как преобразовать текст типа string в char *?
Давайте на примере. Есть переменная text типа string. И есть LineEdit типа QLineEdit. И нужно названить, чтобы текстом LineEdit была переменная string. т.е. нада строку LineEdit->setText(text); записать так, чтобы компилятор не матерился...
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: base operand of '->' has non-pointer type

Сообщение eduard_pustobaev »

Код: Выделить всё

std::string str;
str = "Hello Qt!";
const char* str_ptr = str.c_str();
QString qstr(str_ptr);

QLineEdit *lineEdit = new QLineEdit();
lineEdit->setText(qstr);
В дисгармонии со вселенной.
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: base operand of '->' has non-pointer type

Сообщение KukMan »

А. посиб. Ответ был и в посте serzh-z, но я не разглядел метод c_str().
Спасибо сказали: