Khi cố gắng để biên dịch một lớp đơn giản (g++ myclass.cpp
), tôi nhận được lỗi sau:ISO C++ cấm tuyên bố 'tuple' không có loại
ISO C++ forbids declaration of ‘tuple’ with no type
Tôi đã tìm kiếm cho vấn đề này, và trong nhiều trường hợp người có vẻ để quên std::
hoặc bao gồm <tuple>
trong tiêu đề. Nhưng tôi có cả hai. Đây là mã của tôi:
myclass.h
#ifndef MYCLASS
#define MYCLASS
#include <iostream>
#include <tuple>
class MyClass {
std::tuple<bool, int, int> my_method();
};
#endif
MyClass.cpp
#include "myclass.h"
using namespace std;
tuple<bool, int, int> MyClass::my_method() {
return make_tuple(true, 1, 1);
}
Nếu tôi làm như vậy bằng pair
thay vào đó, bỏ đi thứ hai int
và bao gồm <set>
, nó hoạt động.
Tôi đang thiếu gì?
EDIT:
Dưới đây là toàn bộ sản lượng:
$ g++ myclass.cpp -o prog
In file included from myclass.cpp:1:
myclass.h:7: error: ISO C++ forbids declaration of ‘tuple’ with no type
myclass.h:7: error: invalid use of ‘::’
myclass.h:7: error: expected ‘;’ before ‘<’ token
myclass.cpp:5: error: expected constructor, destructor, or type conversion before ‘<’ token
$ g++ --version
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658)
(LLVM build 2336.11.00)
Bạn có chỉ định '-std = C++ 11' khi biên dịch mã không? –
'sử dụng không gian tên std;' - Thật là một lời báng bổ! –
Không thể tạo lại lỗi này. Bạn có chắc chắn rằng bạn đã sử dụng chính xác mã này không? Bạn nên đánh dấu dòng chính xác g ++ được báo cáo. – Zeta