Qt mit C++ mischen
Qt mit C++ mischen
Hallo,
ich wollte fragen ob es denn irgendwie möglich ist, "normalen" C++ - Code zusammen mit Qt - Code in einer Datei zu haben, denn mein Compiler gibt bis jetzt immer Fehlermeldungen aus, und es kann doch nicht sein, dass ich nun all mein c++ - Wissen erst auf Qt übertragen muss, oder??
Grüße
Gapa
ich wollte fragen ob es denn irgendwie möglich ist, "normalen" C++ - Code zusammen mit Qt - Code in einer Datei zu haben, denn mein Compiler gibt bis jetzt immer Fehlermeldungen aus, und es kann doch nicht sein, dass ich nun all mein c++ - Wissen erst auf Qt übertragen muss, oder??
Grüße
Gapa
Gestern war heute noch morgen!
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
C++ Code
Hallo,
ja es ist mir schon klar, dass aus meinen Qt4 - Befehlen nachher C++ - Code wird, aber dennoch ist es mir ohne weiteres nicht möglich, eine einfache Integer-Variable in die main-Funktion zu packen, denn irgendwie hat sich Qt die main-Funktion für sich gekrallt:
Und wenn ich meine Headerdateien ins Projekt miteinbinde, indenen logischerweise C++-Standartcode steht, so bekomme ich tausende von Fehlermeldungen...wie kann ich das beheben??
Grüße
Gapa
ja es ist mir schon klar, dass aus meinen Qt4 - Befehlen nachher C++ - Code wird, aber dennoch ist es mir ohne weiteres nicht möglich, eine einfache Integer-Variable in die main-Funktion zu packen, denn irgendwie hat sich Qt die main-Funktion für sich gekrallt:
Qt beansprucht die main-Funktion für sich (die heißt jetzt qMain!!)...C:\***\Datei.cpp In function `int qMain(int, char**)':
70 C:\***\Datei.cpp [Warning] unused variable 'i'
Und wenn ich meine Headerdateien ins Projekt miteinbinde, indenen logischerweise C++-Standartcode steht, so bekomme ich tausende von Fehlermeldungen...wie kann ich das beheben??
Grüße
Gapa
Gestern war heute noch morgen!
Es wird nicht "aus Qt4-Befehlen nachher C++ Code"! Qt _ist_ C++!
Wer behauptet sowas? wo bitte in http://doc.trolltech.com/4.3/tutorial-t1.html hats ein "qMain"?Qt beansprucht die main-Funktion für sich (die heißt jetzt qMain!!)...
Ich habe sowohl C also auch C++ -Header in meinen Qt-Projekten... zeig mal her dein "Standard-Code"... gleich zusammen mit den Fehlermeldungen!indenen logischerweise C++-Standartcode steht, so bekomme ich tausende von Fehlermeldungen...wie kann ich das beheben??
Fehler C++ - Qt
Hallo,
Diese Fehlermeldung brachte mir mein Kompiler:
-Projekt: Server.dev
> Server.cpp
> Gui.h
> Connection.h
> Strings.h
> File.h
Server.cpp:
Gui.h
Soweit funktioniert das Projekt.
Wenn ich aber nun eine "normale" Header-Datei hinzufüge, so beschwert er sich:
File.h
Es kommen sofort unzählige Fehlermeldungen, welche ich jetzt nicht alle auflisten möchte...
Aber das schlimme ist, dass ich nicht einmal eine Intiger-Variable in der (q)-Main-Funktion erstellen kann, denn dann kommt sofort wieder obige Fehlermeldung!!
Erstelle ich sie jedoch außerhalb der (q)-Main-Funktion, so mekert er nicht!
Grüße
Gapa
Vielleicht liest du nächstes mal zuerst die Posts deutlicher bevor du wild drauf los schreibst!Wer behauptet sowas? wo bitte in http://doc.trolltech.com/4.3/tutorial-t1.html hats ein "qMain"?
Diese Fehlermeldung brachte mir mein Kompiler:
Also mein Kompiler behauptet das!!!C:\***\Datei.cpp In function `int qMain(int, char**)':
70 C:\***\Datei.cpp [Warning] unused variable 'i'
Hier der Aufbau meines Projekts:Ich habe sowohl C also auch C++ -Header in meinen Qt-Projekten... zeig mal her dein "Standard-Code"... gleich zusammen mit den Fehlermeldungen!
-Projekt: Server.dev
> Server.cpp
> Gui.h
> Connection.h
> Strings.h
> File.h
Server.cpp:
Code: Alles auswählen
//Server.cpp
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef SERVER_CPP
#define SERVER_CPP
#include <iostream>
#include "Gui.h"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Widget_Server_Load::Widget_Server_Load()
{
vbl_main = new QVBoxLayout(this);
gl_address = new QGridLayout;
hbl_security = new QHBoxLayout;
gb_address = new QGroupBox("Adresse");
gb_security = new QGroupBox("Sicherheit");
l_port = new QLabel("Port: ");
l_clients_max = new QLabel("Maximale Benutzerzahl: ");
l_mode = new QLabel("Modus: ");
l_password = new QLabel("Passwort: ");
le_port = new QLineEdit;
le_clients_max = new QLineEdit;
le_mode = new QLineEdit;
le_password = new QLineEdit;
le_password->setEchoMode(QLineEdit::Password);
pb_load = new QPushButton("Hochladen");
gl_address->addWidget(l_port, 0, 0, 1, 1);
gl_address->addWidget(l_clients_max, 1, 0, 1, 1);
gl_address->addWidget(l_mode, 2, 0, 1, 1);
gl_address->addWidget(le_port, 0, 2, 1, 1);
gl_address->addWidget(le_clients_max, 1, 2, 1, 1);
gl_address->addWidget(le_mode, 2, 2, 1, 1);
hbl_security->addWidget(l_password);
hbl_security->addWidget(le_password);
gb_address->setLayout(gl_address);
gb_security->setLayout(hbl_security);
vbl_main->addWidget(gb_address);
vbl_main->addWidget(gb_security);
vbl_main->addWidget(pb_load);
connect(pb_load, SIGNAL( clicked() ), this, SLOT( Load() ) );
setWindowTitle("Server hochfahren");
}
Widget_Server_Load::~Widget_Server_Load()
{
}
void Widget_Server_Load::Load()
{
QMessageBox::information(this, "TestNachricht", le_port->text(), QMessageBox::Ok);
}
int main(int argc, char *argv[]) // 0 = True | 1 = False
{
QApplication a_server(argc, argv);
Widget_Server_Load *w_s = new Widget_Server_Load();
w_s->show();
return a_server.exec();
}
#endifCode: Alles auswählen
//Gui.h
#ifndef GUI_H
#define GUI_H
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QGroupBox>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QMessageBox>
class Widget_Server_Load : public QWidget
{
Q_OBJECT
private:
QVBoxLayout *vbl_main;
QGridLayout *gl_address;
QHBoxLayout *hbl_security;
QGroupBox *gb_address, *gb_security;
QLabel *l_port, *l_clients_max, *l_mode, *l_password;
QLineEdit *le_port, *le_clients_max, *le_mode, *le_password;
QPushButton *pb_load;
public:
Widget_Server_Load();
~Widget_Server_Load();
public slots:
void Load();
};
#endifSoweit funktioniert das Projekt.
Wenn ich aber nun eine "normale" Header-Datei hinzufüge, so beschwert er sich:
File.h
Code: Alles auswählen
//File.h
#ifndef FILE_H
#define FILE_H
#include <fstream>
using namespace std;
struct FileClient
{
char bnme[30];
char pswd[20];
};
bool File_String_Exist(FileClient str, int mode); // 0 = True | 1 = False
bool File_String_Write(FileClient str); // 0 = True | 1 = False
bool File_String_Exist(FileClient str, int mode) // int mode == 1 -> Username & Password | int mode == 2 -> Username
{
ifstream file;
char string_1[50], string_2[50];
memset(&string_1, 0, sizeof(string_1));
memset(&string_2, 0, sizeof(string_2));
if(mode == 1)
{
strncpy(string_1, str.bnme, strlen(str.bnme));
strncat(string_1, "|", strlen("|"));
strncat(string_1, str.pswd, strlen(str.pswd));
}
else if(mode == 2)
strncpy(string_1, str.bnme, strlen(str.bnme));
string_1[strlen(string_1) + 1] = '\0';
file.open("Users.txt");
while(!file.eof())
{
file.getline(string_2, 50, '\n');
string_2[strlen(string_2) + 1] = '\0';
if(strncmp(string_1, string_2, strlen(string_1)) == 0)
return 1;
}
return 0;
}
bool File_String_Write(FileClient str)
{
ofstream file;
char string[50];
memset(&string, 0, sizeof(string));
strncpy(string, str.bnme, strlen(str.bnme));
strncat(string, "|", strlen("|"));
strncat(string, str.pswd, strlen(str.pswd));
file.open("Users.txt", ios::app);
file << string << '\n';
return 0;
}
#endifAber das schlimme ist, dass ich nicht einmal eine Intiger-Variable in der (q)-Main-Funktion erstellen kann, denn dann kommt sofort wieder obige Fehlermeldung!!
Erstelle ich sie jedoch außerhalb der (q)-Main-Funktion, so mekert er nicht!
Grüße
Gapa
Gestern war heute noch morgen!
Irgendwie passt das nicht zusammen:
Hast Du in einem der Includes ein weiteres Include auf die Datei.cpp?
Und im Allgemeinen kann es Probleme geben, wenn man using namespace std in einer Header Datei verwendet. Man sollte das wenn dann nur in CPP Dateien nach allen Includes verwenden. Das muss kein Problem sein, aber kann.
Der Fehler verweist ja auf eine Datei "Datei.cpp" mit einer Funktion qMain (bzw. eigentlich ist es ja gar kein Fehler sondern nur ne Warnung.C:\***\Datei.cpp In function `int qMain(int, char**)':
70 C:\***\Datei.cpp [Warning] unused variable 'i'
Hier ist nirgends eine Datei.cpp und der Code den du gepostet hast enthält auch nirgends eine qMain Funktion.Hier der Aufbau meines Projekts:
-Projekt: Server.dev
> Server.cpp
> Gui.h
> Connection.h
> Strings.h
> File.h
Hast Du in einem der Includes ein weiteres Include auf die Datei.cpp?
Und im Allgemeinen kann es Probleme geben, wenn man using namespace std in einer Header Datei verwendet. Man sollte das wenn dann nur in CPP Dateien nach allen Includes verwenden. Das muss kein Problem sein, aber kann.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Projekt
Hm... ok nochmal ganz von vorne:
Ich habe ein Projekt mit dem Namen Server.dev. Dieses Projekt beinhaltet 3 Dateien:
- Server.cpp (alias Datei.cpp ...wollte nur den Namen nicht mit angeben)
- Gui.h
- Connection.h
Ohne die Connection.h läuft das Projekt stabil, ohne Warnungen und normal.
Füge ich nun die Headerdatei Connection.h hinzu (die ist fehlerlos, denn ich habe sie ja bereits für viele Konsolenprogramme benutzt ohne Qt), so kommen Fehlermeldungen wie :
Die Includes stimmen auch alle!
Aber diese Fehler wollen einfach nicht weggehen!
Was mache ich falsch??
Grüße
Gapa
Ich habe ein Projekt mit dem Namen Server.dev. Dieses Projekt beinhaltet 3 Dateien:
- Server.cpp (alias Datei.cpp ...wollte nur den Namen nicht mit angeben)
- Gui.h
- Connection.h
Ohne die Connection.h läuft das Projekt stabil, ohne Warnungen und normal.
Füge ich nun die Headerdatei Connection.h hinzu (die ist fehlerlos, denn ich habe sie ja bereits für viele Konsolenprogramme benutzt ohne Qt), so kommen Fehlermeldungen wie :
Diese Fehler müssten aber behoben sein, sobald ich unter Projekt-Optionen die winsock32.h den Parametern hinzufüge...[Linker error] undefined reference to `WSAStartup@8'
[Linker error] undefined reference to `htons@4'
[Linker error] undefined reference to `inet_addr@4'
Die Includes stimmen auch alle!
Aber diese Fehler wollen einfach nicht weggehen!
Was mache ich falsch??
Grüße
Gapa
Gestern war heute noch morgen!
Fehler
Hallo,
ja ich weiß dass das ein Linker-Fehler ist, aber ich habe libwsock32.a sowie libws2_32.a hinzugelinkt!!
Die Fehlermeldungen bleiben die gleichen!
Was soll ich tun??
**EDIT**:
Ich habe spaßeshalber mal alle libs hinzugefügt, und der schei** Fehler kommt immer noch...ich hab jetzt keine libs mehr zum Einfügen!!!
Grüße
Gapa
ja ich weiß dass das ein Linker-Fehler ist, aber ich habe libwsock32.a sowie libws2_32.a hinzugelinkt!!
Die Fehlermeldungen bleiben die gleichen!
Was soll ich tun??
**EDIT**:
Ich habe spaßeshalber mal alle libs hinzugefügt, und der schei** Fehler kommt immer noch...ich hab jetzt keine libs mehr zum Einfügen!!!
Grüße
Gapa
Gestern war heute noch morgen!
Aufruf
Ja verwende ich, wenn auch unfreiwillig^^ ...wobei ich für qmake immer den g++ - Compiler verwende.
Also zuerst erstelle ich immer (per qmake) das Projekt-File und dann das Make-File, und dann lass ich das Projekt von Dev-Cpp kompilieren bzw. linken.
Grüße
Gapa
Also zuerst erstelle ich immer (per qmake) das Projekt-File und dann das Make-File, und dann lass ich das Projekt von Dev-Cpp kompilieren bzw. linken.
Grüße
Gapa
Gestern war heute noch morgen!
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
!!!
Ha!
Danke Chris!
Es funktioniert fast!
Ich kann nun fast alle Header-Dateien miteinbinden. Alle bis auf String.h.
Wenn ich String.h miteinbinde, kommen folgende Fehlermeldungen:
Was hat denn das zu bedeuten??
Hier die String.h:
Hoffe auf eine Antwort hierauf.
Grüße
Gapa
Danke Chris!
Es funktioniert fast!
Ich kann nun fast alle Header-Dateien miteinbinden. Alle bis auf String.h.
Wenn ich String.h miteinbinde, kommen folgende Fehlermeldungen:
...und so weiter...42 C:\Programme\CPP\Dev-Cpp\include\c++\3.4.2\cstring:51, from C:\Programme\CPP\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h In file included from C:/Programme/CPP/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/cstring:51, from C:/Programme/CPP/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++locale.h
46 C:\Programme\CPP\Dev-Cpp\include\c++\3.4.2\mingw32\bits\c++locale.h:42, from C:\Programme\CPP\Dev-Cpp\include\c++\3.4.2\iosfwd from C:/Programme/CPP/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++locale.h:42, from C:/Programme/CPP/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/iosfwd
44 C:\Programme\CPP\Dev-Cpp\include\c++\3.4.2\iosfwd:46, from C:\Programme\CPP\Dev-Cpp\include\c++\3.4.2\ios from C:/Programme/CPP/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/iosfwd:46, from C:/Programme/CPP/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ios
45 C:\Programme\CPP\Dev-Cpp\include\c++\3.4.2\ios:44, from C:\Programme\CPP\Dev-Cpp\include\c++\3.4.2\ostream from C:/Programme/CPP/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ios:44, from C:/Programme/CPP/Dev-Cpp/Bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ostream
Was hat denn das zu bedeuten??
Hier die String.h:
Code: Alles auswählen
//String.h
#ifndef STRING_H
#define STRING_H
struct ClientData
{
char part_1[10000];
char part_2[10000];
char part_3[10000];
char part_4[10000];
};
bool String_Compare_Part(char str1[1000], char str2[1000], int pos, int lengh); // 0 = True | 1 = False
char* String_Split(char str[1000], char ch[1], int ch_count); // char* string = True | 1 = False
char* String_Get_Part(char str[1000], int pos_1, int pos_2); // char* string = True | 1 = False
ClientData String_Get_ClientData(char str[1000]); // ClientData structure = True | 1 = False
int String_Get_Pos(char str[1000], char ch[1], int ch_count); // int pos = True | strlen(str) + 1 = False
bool String_Compare_Part(char str1[1000], char str2[1000], int pos, int lengh)
{
for(int i = pos, ii = 0; i < (pos + lengh); i++)
{
ii++;
if(str1[i] != str2[ii])
return 0;
}
return 1;
}
char* String_Split(char str[1000], char ch[1], int ch_count)
{
}
char* String_Get_Part(char str[1000], int pos_1, int pos_2)
{
}
ClientData String_Get_ClientData(char str[1000])
{
ClientData data;
memset(&data, 0, sizeof(ClientData));
for(int i = 0, ii = 0, iii = 0; i <= strlen(str); i++, iii++)
{
if(str[i] == '|')
{
i++;
ii++;
iii = 0;
}
switch(ii)
{
case 0:
data.part_1[iii] = str[i];
break;
case 1:
data.part_2[iii] = str[i];
break;
case 2:
data.part_3[iii] = str[i];
break;
case 3:
data.part_4[iii] = str[i];
break;
}
}
data.part_1[strlen(data.part_1) + 1] = '\0';
data.part_2[strlen(data.part_2) + 1] = '\0';
data.part_3[strlen(data.part_3) + 1] = '\0';
data.part_4[strlen(data.part_4) + 1] = '\0';
return data;
}
int String_Get_Pos(char str[1000], char ch[1], int ch_count)
{
for(int i = 0, ii = 0; i <= strlen(str); i++)
{
if(str[i] == ch[0])
ii++;
if(ii == ch_count)
return i;
}
return (strlen(str) + 1);
}
#endifGrüße
Gapa
Gestern war heute noch morgen!
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Ich weiß zwar nicht was das mit Qt zu tun haben sollte, aber string.h ist ein sehr schlechter Name - ein C-Systemheader heißt nämlich genauso.
Ich würde erstmal etwas besser C/C++ lernen - alle Fehler hier hatten nichts mit Qt zu tun...
Ich würde erstmal etwas besser C/C++ lernen - alle Fehler hier hatten nichts mit Qt zu tun...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung