简体   繁体   中英

How do I get g++ to compile c++11 code with a move constructor?

I can't seem to get g++ to compile c++11 code that uses a move constructor. I keep getting this error:

collin@Serenity:~/Projects/arraylib$ g++ ./t2.cpp
./t2.cpp:10:27: error: expected ‘,’ or ‘...’ before ‘&&’ token
./t2.cpp:10:38: error: invalid constructor; you probably meant ‘Blarg (const Blarg&)’

The program I am writing is quite different from this, but I trimmed it down to the part that seems like it should definitely work, yet still triggers the error:

#include <iostream>

using namespace std;

class Blarg {
    public:
        Blarg () {};
        Blarg (const Blarg& original) {}; /* Copy constructor */
        Blarg (Blarg&& original) {}; /* Move constructor */
};

int main(int argc, char *argv[])
{
    Blarg b;
    return 0;
}

Can anyone tell me what I am doing wrong? Rather, how to fix it?

This is my gcc version:

gcc (Ubuntu/Linaro 4.6.2-14ubuntu2) 4.6.2

Say g++ -std=c++0x ./t2.cpp .

While you're at it, you might as well Do It Right and enable all warnings:

g++ -W -Wall -Wextra -pedantic -std=c++0x -o t2 t2.cpp

You really, really shouldn't be compiling with any less, especially if you are going to ask questions about your code on SO :-) Various optimization flags should optionally be considered for the release version, such as -s -O2 -flto -march=native .

您可能忘记在命令行中添加-std=c++0x

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM