boost::lexical_cast gibt fehler unter Qt und nicht in VS2010
boost::lexical_cast gibt fehler unter Qt und nicht in VS2010
Hallo,
ich bin gerade dabei den Code einer Consolenanwendung die ich in VS2010exp geschrieben habe in den Qt Creator rüberzuschaufeln um dort eine widget basierte Anwendung zu erstellen. Im code verwende ich oft boost::lexical_cast. Unter VS läuft das ohne Probleme. In Qt (ich verwende den VS compiler) erhalte ich folgende Fehlermeldung (ohne bezug auf eine besondere Zeile im code):
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1116: error: C2535: 'bool boost::detail::lexical_stream_limited_src<CharT,Base,Traits>::operator >>(unsigned short &)' : member function already defined or declared
with
[
CharT=char_type,
Base=base,
Traits=traits
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:993: see declaration of 'boost::detail::lexical_stream_limited_src<CharT,Base,Traits>::operator >>'
with
[
CharT=char_type,
Base=base,
Traits=traits
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1524: see reference to class template instantiation 'boost::detail::lexical_stream_limited_src<CharT,Base,Traits>' being compiled
with
[
CharT=char_type,
Base=base,
Traits=traits
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1653: see reference to function template instantiation 'Target boost::detail::lexical_cast<Target,src,false,char_type>(const std::basic_string<_Elem,_Traits,_Ax> &,CharT *,size_t)' being compiled
with
[
Target=float,
_Elem=wchar_t,
_Traits=std::char_traits<wchar_t>,
_Ax=std::allocator<wchar_t>,
CharT=char_type
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1641: while compiling class template member function 'float boost::detail::lexical_cast_do_cast<Target,Source>::lexical_cast_impl(const Source &)'
with
[
Target=float,
Source=src
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1813: see reference to class template instantiation 'boost::detail::lexical_cast_do_cast<Target,Source>' being compiled
with
[
Target=float,
Source=src
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1813: see reference to class template instantiation 'boost::detail::lexical_cast_do_cast<Target,Source>' being compiled
with
[
Target=float,
Source=src
]
Wo liegt hier der Hund begraben?
Grüße
ich bin gerade dabei den Code einer Consolenanwendung die ich in VS2010exp geschrieben habe in den Qt Creator rüberzuschaufeln um dort eine widget basierte Anwendung zu erstellen. Im code verwende ich oft boost::lexical_cast. Unter VS läuft das ohne Probleme. In Qt (ich verwende den VS compiler) erhalte ich folgende Fehlermeldung (ohne bezug auf eine besondere Zeile im code):
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1116: error: C2535: 'bool boost::detail::lexical_stream_limited_src<CharT,Base,Traits>::operator >>(unsigned short &)' : member function already defined or declared
with
[
CharT=char_type,
Base=base,
Traits=traits
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:993: see declaration of 'boost::detail::lexical_stream_limited_src<CharT,Base,Traits>::operator >>'
with
[
CharT=char_type,
Base=base,
Traits=traits
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1524: see reference to class template instantiation 'boost::detail::lexical_stream_limited_src<CharT,Base,Traits>' being compiled
with
[
CharT=char_type,
Base=base,
Traits=traits
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1653: see reference to function template instantiation 'Target boost::detail::lexical_cast<Target,src,false,char_type>(const std::basic_string<_Elem,_Traits,_Ax> &,CharT *,size_t)' being compiled
with
[
Target=float,
_Elem=wchar_t,
_Traits=std::char_traits<wchar_t>,
_Ax=std::allocator<wchar_t>,
CharT=char_type
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1641: while compiling class template member function 'float boost::detail::lexical_cast_do_cast<Target,Source>::lexical_cast_impl(const Source &)'
with
[
Target=float,
Source=src
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1813: see reference to class template instantiation 'boost::detail::lexical_cast_do_cast<Target,Source>' being compiled
with
[
Target=float,
Source=src
]
c:\Program\boost\boost_1_47\boost\lexical_cast.hpp:1813: see reference to class template instantiation 'boost::detail::lexical_cast_do_cast<Target,Source>' being compiled
with
[
Target=float,
Source=src
]
Wo liegt hier der Hund begraben?
Grüße
Re: boost::lexical_cast gibt fehler unter Qt und nicht in VS
Irgendwo include guards vergessen?
Re: boost::lexical_cast gibt fehler unter Qt und nicht in VS
Include guard ist mir was neues. (Bin seit gestern mit Qt zugange)
In der .pro habe ich den hauptpfad zu boost hinterlegt:
INCLUDEPATH += C:\\Program\\boost\\boost_1_47
und in der besagten .cpp
#include <boost\algorithm\string.hpp>
#include <boost\foreach.hpp>
#include <boost\lexical_cast.hpp>
Sonst keine includes. Ich kann somit keinen "Zirkelverweis" erkennen. Aber ich forsche mal weiter in die Richtung..
In der .pro habe ich den hauptpfad zu boost hinterlegt:
INCLUDEPATH += C:\\Program\\boost\\boost_1_47
und in der besagten .cpp
#include <boost\algorithm\string.hpp>
#include <boost\foreach.hpp>
#include <boost\lexical_cast.hpp>
Sonst keine includes. Ich kann somit keinen "Zirkelverweis" erkennen. Aber ich forsche mal weiter in die Richtung..
Re: boost::lexical_cast gibt fehler unter Qt und nicht in VS
Kannst du mal ein minimales Beispiel zusammenstellen, das beim Kompilieren mit dem selben Fehler aussteigt? Denn ohne Code kann man schwer helfen
Re: boost::lexical_cast gibt fehler unter Qt und nicht in VS
Ich habe noch kein min Beispiel zusammengedampft aber im Prinzip wird folgendes gemacht:
table.h fängt so an:
player.h
und stdfx.h
und die .pro Datei:
Es sind noch ein paar überflüssige includes dabei, aber keiner sollte dem BOOST teil in dei quere kommen...
Code: Alles auswählen
#include "TABLE.h"
std::vector<std::wstring> tokenized;
// Dann wird tokenized mit Inhalt gefüllt..
itPlayName->preGame.points = boost::lexical_cast<float>(tokenized[tokenized.size()-1]);
Code: Alles auswählen
#ifndef TABLE_H
#define TABLE_H
#include "stdafx.h"
#include <map>
#include "stdlib.h"
#include <boost\algorithm\string.hpp>
#include <boost\foreach.hpp>
#include <boost\lexical_cast.hpp>
#include "PLAYER.h"
Code: Alles auswählen
#ifndef PLAYER_H
#define PLAYER_H
#include "windows.h"
#include <vector>
#include <algorithm>
Code: Alles auswählen
#pragma once
//#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include "windows.h"
#include "string.h"
#include "conio.h"
#include "WinNT.h"
#include "stdlib.h"
#include "time.h"
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <fstream>
Code: Alles auswählen
QT += core gui
TARGET = untitled
TEMPLATE = app
SOURCES += main.cpp\
textfinder.cpp \
PLAYER.cpp \
TABLE.cpp
HEADERS += textfinder.h \
stdafx.h \
PLAYER.h \
TABLE.h
FORMS += textfinder.ui
RESOURCES += \
textfinder.qrc
INCLUDEPATH += C:\\Program\\boost\\boost_1_47
Re: boost::lexical_cast gibt fehler unter Qt und nicht in VS
Ich hab mir jetzt extra selber ein Beispiel mit Qt und boost::lexical_cast zusammen gebastelt, und wie zu erwarten - kompiliert.
Ich verwende aber auch gcc-4.6.3 unter Linux (+ Qt-4.8.2, boost-1.49.0). Also womöglich ein VS-Problem.
Pack doch einfach mal alles in ein .zip und häng es hier an. (Forenfunktion "Dateianhang hochladen")
Was mir noch auffällt: du verwendest die veralteten C-Header. Statt time.h solltest du ctime nehmen, statt string.h cstring, usw. Außerdem sind das Header deiner Installation und nicht projektlokale, die über einen relativen Pfad erreichbar sind, dann packt man die in "<>".
Außerdem kommen in HEADERS im .pro nur solche Header, die durch den moc sollen, also wo Klassen von QObject abgeleitet definiert und mit Q_OBJECT versehen sind - stdafx.h ist das schonmal nicht
Code: Alles auswählen
#include <QtCore/QString>
#include <QtCore/QDebug>
#include <string>
#include <boost/lexical_cast.hpp>
#include <iostream>
int main() {
std::wstring s = L"123.5";
float f = boost::lexical_cast<float>(s);
std::wcout << f << std::endl;
QString qs = QString::number(f);
qDebug() << qs;
}
Pack doch einfach mal alles in ein .zip und häng es hier an. (Forenfunktion "Dateianhang hochladen")
Was mir noch auffällt: du verwendest die veralteten C-Header. Statt time.h solltest du ctime nehmen, statt string.h cstring, usw. Außerdem sind das Header deiner Installation und nicht projektlokale, die über einen relativen Pfad erreichbar sind, dann packt man die in "<>".
Außerdem kommen in HEADERS im .pro nur solche Header, die durch den moc sollen, also wo Klassen von QObject abgeleitet definiert und mit Q_OBJECT versehen sind - stdafx.h ist das schonmal nicht
Re: boost::lexical_cast gibt fehler unter Qt und nicht in VS
Hallo Franz, vielen Dank für Deine Antwort und Zeit....
Das die header veraltet waren wusste ich nicht... habe ich schon mal geändert.
<> bzw "" --> Hast recht
Was bedeutet "moc"? Da ich erst seit 2 Tagen mit Qt arbeite möge man mir mein Unwissen verzeihen.
Grüße,
Strumpa
Das die header veraltet waren wusste ich nicht... habe ich schon mal geändert.
<> bzw "" --> Hast recht
Was bedeutet "moc"? Da ich erst seit 2 Tagen mit Qt arbeite möge man mir mein Unwissen verzeihen.
Grüße,
Strumpa
Re: boost::lexical_cast gibt fehler unter Qt und nicht in VS
Nachdem ich das ganze Windows-Zeugs rausgehauen hab, hat es kompiliert.
Also entweder ein VS-Problem oder du hast an den boost-headern rumgeschraubt. Probiers mal mit einer frischen (am besten aktuellen) Version.
In einem Beitrag im Internet hab ich gelesen, dass lange Kommentare den VS verwirren können. Verpass deinen Sourcen mal ne Schrumpfkur und lösche ALLE Kommentare!
Also entweder ein VS-Problem oder du hast an den boost-headern rumgeschraubt. Probiers mal mit einer frischen (am besten aktuellen) Version.
In einem Beitrag im Internet hab ich gelesen, dass lange Kommentare den VS verwirren können. Verpass deinen Sourcen mal ne Schrumpfkur und lösche ALLE Kommentare!
Re: boost::lexical_cast gibt fehler unter Qt und nicht in VS
Moin! Habe die neuste Boost version runtergeladen, nun läufts. Hattest Du bei deinem Versuch eine Fehlermeldung bezüglich "TABLE.obj : error LNK2019: unresolved external symbol __imp__GetWindowTextW@12 referenced in...." ? Grüße Strumpa