注册 登录
编程论坛 C++教室

有关右值和左值引用成员函数的问题,不知道为什么有错?

忠犬八公 发布于 2014-04-21 23:42, 983 次点击
程序代码:
#include <iostream>
#include <vector>

using namespace std;

class Foo
{
public:
    Foo()=default;
    Foo(initializer_list<int> il):data(il) {}
    Foo sorted() &&;
    Foo sorted() const &;
    void print() const;
private:
    vector<int> data;
};

Foo Foo::sorted() &&
{
    sort(data.begin(),data.end());
    cout<<"调用右值引用函数"<<endl;
    return *this;
}

Foo Foo::sorted() const &
{
    Foo ret(*this);
    sort(ret.data.begin(),ret.data.end());
    cout<<"调用左值引用函数"<<endl;
    return ret;
}

void Foo::print() const
{
    for(auto c:data)
        cout<<c<<" ";
}

int main()
{
    Foo f1({3,4,6,1,8,9,0,2}),f2({7,6,5,4,3});
    f1.sorted();
    std::move(f2).sorted();
    f1.print();
    f2.print();

    return 0;
}

成员函数sorted那里提示有错!不知道为什么?
8 回复
#2
rjsp2014-04-22 10:47
首先,这是最重要的一点,编译失败的话,你应该贴出编译器给出的错误信息,而不是让别人通过肉眼去找错。

其次,你用了sort,但却无一处声明定义它。这是基础知识呀
#include <algorithm>


#3
忠犬八公2014-04-22 11:17
回复 2 楼 rjsp
||=== Primer, Debug ===|
C:\Users\Administrator\Desktop\C++ Primer\C++ Primer 书中例子\新建文件夹\Primer\main.cpp|12|error: expected ';' at end of member declaration|
C:\Users\Administrator\Desktop\C++ Primer\C++ Primer 书中例子\新建文件夹\Primer\main.cpp|12|error: expected unqualified-id before ';' token|
C:\Users\Administrator\Desktop\C++ Primer\C++ Primer 书中例子\新建文件夹\Primer\main.cpp|13|error: expected ';' at end of member declaration|
C:\Users\Administrator\Desktop\C++ Primer\C++ Primer 书中例子\新建文件夹\Primer\main.cpp|13|error: expected unqualified-id before ';' token|
C:\Users\Administrator\Desktop\C++ Primer\C++ Primer 书中例子\新建文件夹\Primer\main.cpp|19|error: expected initializer before '&&' token|
C:\Users\Administrator\Desktop\C++ Primer\C++ Primer 书中例子\新建文件夹\Primer\main.cpp|26|error: expected initializer before '&' token|
||=== 已完成构建: 6 errors, 0 warnings (0 minutes, 1 seconds) ===|
你说的对,给出错误信息,加了之后还是这个错!
#4
rjsp2014-04-22 12:06
你用的是什么编译器?
你换个支持C++标准的编译器试试看。比如我用 g++4.8.1 带上编译参数 -std=c++11 就可以编译成功。
#5
hubinyes2014-04-22 21:30
孤陋寡闻,看不懂,,default是什么
#6
忠犬八公2014-04-22 22:33
回复 4 楼 rjsp
我用的是Code::Blocks编程环境,编译器叫GNU GCC CompilerC++标准其它都支持,就这个不支持,你说的g++不知道怎么搞

[ 本帖最后由 忠犬八公 于 2014-4-22 22:35 编辑 ]
#7
忠犬八公2014-04-22 23:45
回复 4 楼 rjsp
换个编译器后就提示unrecognized command line option '-std=c++11'不知道怎么搞了?
#8
发发发可2014-04-23 12:38
回复 5 楼 hubinyes
c++11  使用编译器默认的默认构造函数
#9
鸥翔鱼游2014-04-23 12:59
观摩技术性回复
1