Đoạn mã dưới đây không thể biên dịch bằng g ++ phiên bản 4.5.0 bằng cách sử dụng công tắc -std=c++0x
. Tôi nhận được thông báo lỗi sau:C++ 11 bản sao gán cho std :: complex trong g ++ 4.5 - không phù hợp cho 'operator +'
error: no match for 'operator+' in 'std::pow [with _Tp = float, _Up = int, typename __gnu_cxx::__promote_2<_Tp, _Up>::__type = double](((const std::complex<float>&)((const std::complex<float>*)(& x))), ((const int&)((const int*)(&2)))) + y'
Tôi tin rằng điều này liên quan đến việc yêu cầu gán nêu here. Tôi có nên định nghĩa toán tử gán bản sao của riêng mình cho phức tạp không? Nếu vậy, làm thế nào?
#include <complex>
using namespace std;
int main(int argc, char *argv[]) {
complex<float> x,y;
x = pow(x,2); // ok
x = x + y; // ok
x = pow(x,2) + y; // error
return 0;
}
Lỗi, được đơn giản hóa, cho biết "Không có toán tử + phức tạp và phức tạp " –
Cubbi
@parapura rajkumar: Thật không may là không. – user2023370
Điều này biên dịch trên VS2010 có lẽ cần mẫu hoặc từ khóa tên. – AJG85