Имам заглавка, наречена filepaths.h, която дефинира редица статични променливи:
#ifndef FILEPATHS_H
#define FILEPATHS_H
class FilePaths {
public:
static QString dataFolder();
static QString profileFolder();
private:
static QString dataFolder_;
static QString profileFolder_;
};
}
#endif // FILEPATHS_H
И имам асоцииран filepaths.cpp, който първоначално изглеждаше така:
#include "FilePaths.h"
QString FilePaths::dataFolder() {
return dataFolder_;
}
QString FilePaths::profileFolder() {
return profileFolder_;
}
Това обаче не проработи - получих грешка на линкера „неразрешена символна грешка“ на всички статични променливи. Така че добавих тези променливи към C++ файла по следния начин:
#include "FilePaths.h"
QString FilePaths::dataFolder_ = "";
QString FilePaths::profileFolder_ = "";
QString FilePaths::dataFolder() {
return dataFolder_;
}
QString FilePaths::profileFolder() {
return profileFolder_;
}
И това работи, но не разбирам защо.
Защо тези статични променливи трябва да бъдат дефинирани два пъти? Или може би не ги дефинирам, а ги инициализирам? Но все пак защо трябва да се направи? Или трябва да напиша класа си по различен начин?