Есть код:
//id3v1stringhandler.h
namespace TagLib
{
class ByteVector;
class String;
namespace ID3v1
{
class StringHandler;
}
}
class QTextCodec;
class ID3v1StringHandler : public StringHandler
{
private:
QTextCodec *m_codec;
public:
ID3v1StringHandler();
virtual String parse(const ByteVector &data) const;
void setCodec(int index);
};
//id3v1stringhandler.cpp
#include <qtextcodec.h>
#include <tstring.h>
#include <id3v1tag.h>
#include <tbytevector.h>
#include "id3v1stringhandler.h"
ID3v1StringHandler::ID3v1StringHandler()
{
m_codec=QTextCodec::codecForLocale();
}
void ID3v1StringHandler::setCodec(int index)
{
m_codec=QTextCodec::codecForIndex(index);
}
String ID3v1StringHandler::parse(const ByteVector &data) const
{
return QStringToTString(m_codec->toUnicode(data.data(), data.size()));
}
Пытаюсь скомпилить:
$ g++ -c id3v1stringhandler.cpp -I$QTDIR/include -I/usr/include/taglib -L$QTDIR/lib -lqt-mt -ltag
В ответ куча ругани, если все инклуды прописываю в id3v1string.h и говорю using namespace std; то все работает, но тогда появляются конфликты в основном проекте.
Вопрос: Как-же это все победить?:)
[light@localhost amarok]$ g++ -c id3v1stringhandler.cpp -I$QTDIR/include -I/usr/include/taglib -L$QTDIR/lib -lqt-mt -ltag
In file included from id3v1stringhandler.cpp:6:
id3v1stringhandler.h:14: error: syntax error before `{' token
id3v1stringhandler.h:21: error: syntax error before `(' token
id3v1stringhandler.h:24: error: syntax error before `}' token
id3v1stringhandler.cpp:9: error: invalid use of undefined type `class
ID3v1StringHandler'
id3v1stringhandler.h:13: error: forward declaration of `class
ID3v1StringHandler'
id3v1stringhandler.cpp: In constructor `
ID3v1StringHandler::ID3v1StringHandler()':
id3v1stringhandler.cpp:10: error: `m_codec' undeclared (first use this
function)
id3v1stringhandler.cpp:10: error: (Each undeclared identifier is reported only
once for each function it appears in.)
id3v1stringhandler.cpp: At global scope:
id3v1stringhandler.cpp:14: error: invalid use of undefined type `class
ID3v1StringHandler'
id3v1stringhandler.h:13: error: forward declaration of `class
ID3v1StringHandler'
id3v1stringhandler.cpp:18: error: syntax error before `::' token
[light@localhost amarok]$
Вот дикларация TagLib::ID3v1::StringHandler
http://developer.kde.org/~wheeler/taglib/api/classTagLib_1_1ID3v1_1_1StringHandl
er.html