Russian Qt Forum

Qt => Общие вопросы => Тема начата: qtkoder777 от Август 06, 2014, 10:16



Название: Ошибка линковщика на QMap<QString, int> (VS2008, Qt 4.4.3)
Отправлено: qtkoder777 от Август 06, 2014, 10:16
Добавил член класса
Код
C++ (Qt)
QMap<QString, int> qmqsi;
Линковщик выдает ошибку:
Код
C++ (Qt)
error LNK2005: "private: static struct QMap<class QString,int>::Node * __cdecl QMap<class QString,int>::concrete(struct QMapData::Node *)" (?concrete@?$QMap@VQString@@H@@CAPAUNode@1@PAU2QMapData@@@Z) already defined in ...  
fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe (tool returned code: 1169)
Смена имени переменной не помогает.
После замены <QString, int> на что-то другое, например <QString, QString>, ошибка исчезает.
Как избавиться от этой ошибки?



Название: Re: Ошибка линковщика на QMap<QString, int> (VS2008, Qt 4.4.3)
Отправлено: Пантер от Август 06, 2014, 11:00
static struct - мембер статический? Приложи сюда пару h/cpp.


Название: Re: Ошибка линковщика на QMap<QString, int> (VS2008, Qt 4.4.3)
Отправлено: qtkoder777 от Август 06, 2014, 11:22
Нестатический.
Слово static в h и cpp не встречается.


Название: Re: Ошибка линковщика на QMap<QString, int> (VS2008, Qt 4.4.3)
Отправлено: alex312 от Август 06, 2014, 11:50
Вот такой тестовый класс отлично компилируется
Код
C++ (Qt)
#ifndef WITHQMAP_HPP
#define WITHQMAP_HPP
 
#include <QObject>
#include <QMap>
 
class WithQMap : public QObject
{
   Q_OBJECT
public:
   explicit WithQMap(QObject *parent = 0);
 
   QList<QString> keys();
private:
   QMap<QString,int>     str_int_map_;
   QMap<QString,QString> str_str_map_;
};
Код
C++ (Qt)
#include "withqmap.hpp"
 
WithQMap::WithQMap(QObject *parent) :
   QObject(parent)
{
}
 
QList<QString> WithQMap::keys()
{
   return str_int_map_.keys();
}
Так что проблема не в QMap<QString,int> , правда я тестировал на более свежих версиях Qt и msvc


Название: Re: Ошибка линковщика на QMap<QString, int> (VS2008, Qt 4.4.3)
Отправлено: vizir.vs от Август 06, 2014, 16:42
Судя по
Код:
fatal error LNK1169: one or more multiply defined symbols found
У тебя эта мапина два раза определена.


Название: Re: Ошибка линковщика на QMap<QString, int> (VS2008, Qt 4.4.3)
Отправлено: qtkoder777 от Август 12, 2014, 11:11
Если бы два раза, ругался бы компилятор.
Искал по проекту, такая карта только в одном месте.
решил проблему тупым преобразованием QString->int, т.к. QMap<QString, QString> работает