C++ windows上的Qt类错误

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>);

我有这个.h文件

#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)
{
}