Я определил свой собственный класс в проекте Qt, который дает мне проблемы, но я думаю, что это может быть общий C++.Проблемы с указателем на класс
Когда я пытаюсь объявить указатель на мой класс в любой включаемый файл в проекте myHashMap как
myHashMap* map;
компилятор выдает ошибку и сказать: «множественное определение карты». Что это? Я даже не определил указатель, даже объявил его.
Однако размещение myHashMap* map
в исходном файле не дает никаких ошибок.
Вот определение и объявление класса, извините, что это выглядит немного грязно.
#include QObject
#include QHash
class myHashMap : public QObject
{
Q_OBJECT
public:
explicit myHashMap(QObject *parent = 0);
float Get(const QString& key) const;
void setValue(const char key, float value)
{
// only emit value changed if the value has actually changed
//if(hash->value(key) != value)
//{
hash->insert(key,value);
//emit ValueChanged(key, value);
//}
}
signals:
public slots:
//void ValueChanged(const char& key, float newValue);
private:
QHash<const char, float>* hash;
};
myHashMap::myHashMap(QObject *parent) :
QObject(parent)
{
hash = new QHash<const char,float>;
}
EDIT:
Ааа, облом, я просто забыл предварять MyHashMap * с экстерном ключевого слова. Программирование C++ - это ничтожно. Разве это не имеет смысла, если компилятор отправил предупреждение здесь, например, «привет, теперь у вас есть несколько определений в нескольких заголовках, забыли ключевое слово extern?» ?
Однако у меня возникла новая проблема.
В «communication.h» Я предрек пространство имен, как этот
namespace reference
{
extern const char potentiometer;
extern const char KpAngle;
extern const char KiAngle;
extern const char KdAngle;
extern const int length;
extern myHashMap* hmap;
void init();
}
В communication.cpp я хочу использовать * HMAP, как показано ниже, но компилятор возвращает «неопределенная ссылка на HMAP». Тем не менее, я включил «communication.h» как в «communication.cpp», так и в файл * .pro. См. Код ниже:
#include "communication.h"
namespace reference
{
const char potentiometer = 0x05;
const char KpAngle = 0x06;
const char KiAngle = 0x07;
const char KdAngle = 0x08;
const int length =1;
//QList<const char>* summary = new QList<const char>();
void init()
{
//using namespace reference;
//#include "communication.h"
//myHashMap* hmap = new myHashMap();
//when using this a hmap is created, however setValue returns undefined ref
//Both methods below returns "undefine reference to hmap". Same if i try "using namespace"
//reference::hmap = new myHashMap();
//hmap = new myHashMap();
/*
reference::hmap->setValue(potentiometer,-1);
reference::hmap->setValue(KpAngle,-1);
reference::hmap->setValue(KiAngle,-1);
reference::hmap->setValue(KdAngle,-1);*/
}
}
EDIT: Над указателем hmap указано только, не определено. Поэтому я определил hmap, установив
myHashMap * hmap непосредственно в справочной области в «communication.cpp». Теперь это работает.
Попробуйте переименовать карту на что-то еще, например myMap. –
Ваша первая строка недействительна C++; опубликуйте свой реальный код. Какие еще определения «map» компилятор упоминает? –
Комментарий к вашей второй проблеме: включили ли вы заголовочный файл для myHashMap в comunications.h? –