C++ windows上的Qt类错误
我有这个.h文件C++ windows上的Qt类错误,c++,windows,qt,C++,Windows,Qt,我有这个.h文件 #ifndef VISUALSETTINGS_H #define VISUALSETTINGS_H #include <QPair> #include <QDataStream> class VisualSettings { public: VisualSettings(); VisualSettings(QPair<int, int>, QPair<int, int>);
#ifndef VISUALSETTINGS_H
#define VISUALSETTINGS_H
#include <QPair>
#include <QDataStream>
class VisualSettings
{
public:
VisualSettings();
VisualSettings(QPair<int, int>, QPair<int, int>);
QPair<int, int> getUpper();
void setUpper(QPair<int, int>);
QPair<int, int> getLower();
QPair<int, int> setLower(QPair<int, int>);
private:
QPair<int, int> upper;
QPair<int, int> lower;
};
QDataStream &operator<<(QDataStream &out, const VisualSettings &vs);
QDataStream &operator>>(QDataStream &in, VisualSettings &vs);
#endif // VISUALSETTINGS_H
在.cpp中,我有:
bool caseArtistLessThan(const SongInfo &s1, const SongInfo &s2)
{
QString str1(ID3_GetArtist(&s1.getTag()));
QString str2(ID3_GetArtist(&s2.getTag()));
return str1 < str2;
}
bool caseArtistLessThan(const-SongInfo&s1,const-SongInfo&s2)
{
QString str1(ID3_GetArtist(&s1.getTag());
QString str2(ID3_GetArtist(&s2.getTag());
返回str1
我得到一个错误:
C:\Users\Alex\testing-build-desktop-Qt_4_8_0_for_desktop_-MSVC2010_Qt_SDK__发布..\testing\playlist.cpp:20:错误:C2662:'SongInfo::getTag':无法将'this'指针从'const SongInfo'转换为'SongInfo&'
转换将丢失限定符
C:\Users\Alex\testing-build-desktop-Qt_4_8_0_for_desktop_-MSVC2010_Qt_SDK__发布..\testing\playlist.cpp:20:错误:C2662:'SongInfo::getTag':无法将'this'指针从'const SongInfo'转换为'SongInfo&'
转换将丢失限定符
有人能帮我解决这个问题吗?我不明白为什么它不起作用。我看过很多例子,我也做过类似的事情。有什么问题吗?#包括
#include<visualsettings.h>
将其添加到main.cpp的顶部关于第二个错误。无法将常量参数传递给运算符>>,因为您将对其进行修改。const表示不允许修改对象 其他一些注意事项: QPair已指定接线员,因此您无需致电
upper.first = u.first;
upper.second = u.second;
改用
upper = u;
还有初始化列表,您可以按如下方式分配它:
QPair<int, int> q1(2,3);
QPair<int, int> q2(4, 5);
VisualSettings v(q1, q2);
//QPair<int, int> q3 = v.getUpper();
//cout << v.getUpper().first;// << " - " << vs.getUpper().second << endl;
VisualSettings::VisualSettings(QPair<int, int> u, QPair<int, int> l)
: upper(u)
, lower(l)
{
}
VisualSettings::VisualSettings(QPair u、QPair l)
:上(u)
,下(l)
{
}
它起作用了,但我遇到了另一个错误。我在主帖子中对错误进行了编辑,我已经解决了>>的问题;正如你所说;但是错误在运算符处,如果方法不修改类的内容,则应该声明void something()const方法将const添加到SongInfo::getTag
的声明中,这样做有效!非常感谢你!
bool caseArtistLessThan(const SongInfo &s1, const SongInfo &s2)
{
QString str1(ID3_GetArtist(&s1.getTag()));
QString str2(ID3_GetArtist(&s2.getTag()));
return str1 < str2;
}
#include<visualsettings.h>
upper.first = u.first;
upper.second = u.second;
upper = u;
VisualSettings::VisualSettings(QPair<int, int> u, QPair<int, int> l)
: upper(u)
, lower(l)
{
}