Die richtige Verwendung von std

Marco Ribolla

Grünschnabel
Hallo zusammen!

Ich habe gerade begonnen C++ kombiniert mit Qt zu programmieren. Mein Ziel ist es wenn man auf einen Button drückt, dass der String vom Label geändert wird. Hierzu mein Code:
C++:
// main
/////////////////////////////////////////////////////////////////////////
#include "test.h"
#include "logic.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	Test w;
	w.show();
	return a.exec();
}


//test.h
/////////////////////////////////////////////////////////////////////////
#ifndef TEST_H
#define TEST_H

#include <QtGui/QMainWindow>
#include "ui_test.h"
#include "logic.h"

class Logic;

class Test : public QMainWindow, public Logic
{
	Q_OBJECT

public:
	Test(QWidget *parent = 0, Qt::WFlags flags = 0);
	~Test();

	void virtual updateUserInterface();

private slots:
	void on_pushButton_clicked();

private:
	Ui::TestClass ui;
};

#endif // TEST_H

//test.cpp
/////////////////////////////////////////////////////////////////////////
#include "test.h"
#include <QString>

Test::Test(QWidget *parent, Qt::WFlags flags)
	: QMainWindow(parent, flags)
{
	ui.setupUi(this);
}

Test::~Test()
{

}

void Test::updateUserInterface()
{
	QString qstr = QString::fromStdString(getText());
	ui.label->setText(qstr);
}

void Test::on_pushButton_clicked()
{
	Logic::onButton();
}

//logic.h
/////////////////////////////////////////////////////////////////////////
#ifndef LOGIC_H
#define LOGIC_H

class Logic
{

public:
	void virtual updateUserInterface();
	virtual ~Logic();

protected:
	void onButton();
	const std::string& getText();

private:
	std::string m_Text;
};

#endif // LOGIC_H

//logic.cpp
/////////////////////////////////////////////////////////////////////////

Logic::~Logic()
{

}

void Logic::updateUserInterface()
{

}

void Logic::onButton()
{
	m_Text = "Label changed";
	updateUserInterface();
}

const std::string& Logic::getText()
{
	return m_Text;
}
Wenn ich versuche zu kompilieren, bekomme ich einen C2653 zurück ('std', keine Klasse oder Namespace) und diverse andere Compilerfehlermeldungen welche meiner Meinung nach mit diesem zu tun haben (C4430, C2143, etc...). Weiss jemand ine elegante Lösung wie ich das Problem beheben kann? Wenn ich (stupiderweise) in jedem File (.cpp und .h) using namespace std; einfüge bringt mich das keinen Schritt weiter. Ich wäre wirklich froh, wenn mir jemand helfen könnte! Vielen Dank******

Gruss, Marco
 
Zuletzt bearbeitet von einem Moderator:
Hallo Marco,

du musst in Logic.h <string> inkludieren, sonst weiß der Compiler nicht was std::string sein soll.

Grüße,
Matthias

P.S.: Nachträglich noch willkommen auf tutorials.de! C++-Quellcode kannst du hier mit der Notation [ code=cp p]...[ /code ] einbinden, dann wird er automatisch hervorgehoben.
 
Zuletzt bearbeitet:
Zurück