2011-10-13 26 views
5

Xin chào Tôi đã nâng cấp Xcode của tôi lên phiên bản 4.2 và kêu vang ++ lên phiên bản:kêu vang ++ thông báo lỗi khi sử dụng C++ 0x: gọi constructor xóa của

Apple clang version 3.0 (tags/Apple/clang-211.10.1) (based on LLVM 3.0svn) 
Target: x86_64-apple-darwin11.2.0 
Thread model: posix 

Khi cố gắng để biên dịch đoạn mã sau với kêu vang -std = C++ 0x

#include <memory> 
#include <limits> 
#include <boost/shared_ptr.hpp> 


class ilpConstraintImpl { 
public: 
    virtual ~ilpConstraintImpl() {} 
}; 


class ilpConstraint { 
public: 
    ilpConstraint(ilpConstraintImpl* implptr):impl(implptr) { } 
public: 
    boost::shared_ptr<ilpConstraintImpl> impl; 
}; 

class ilpExprImpl { 
public: 
    virtual ilpConstraint operator<= (const double rs)=0; 
    virtual ~ilpExprImpl() {} 
}; 



class ilpExpr { 
public: 
    virtual ~ilpExpr() {}; 
    ilpConstraint operator<= (const double rs) { return impl->operator<=(rs); } 
    ilpExpr(ilpExprImpl* implptr):impl(implptr) { } 
    boost::shared_ptr<ilpExprImpl> impl; 
}; 

tôi nhận được lỗi sau:

./test.h:46:54: error: call to deleted constructor of 'ilpConstraint' 
    ilpConstraint operator<= (const double rs) { return impl->operator<=(rs); } 
                 ^~~~~~~~~~~~~~~~~~~~ 
./test.h:28:7: note: function has been explicitly marked deleted here 
class ilpConstraint { 
    ^
1 error generated. 

Biên soạn không -std = C++ 0x công trình.

Trả lời

6

Điều này trông giống như một lỗi ghẻ với tôi. Tôi đang làm việc với một phiên bản clang sau đó mà không có hành vi này. Bạn có thể thử cung cấp cho ilpConstraint một hàm tạo bản sao rõ ràng làm giải pháp tạm thời.

+0

Đó là loại công trình .... thêm một constructor sao chép như: \t ilpConstraint (const ilpConstraint & impcon): impl (impcon.impl) {} di chuyển các vấn đề để đến shared_ptr với thông báo lỗi tương tự:) – plaisthos

+0

Xin lỗi. Bạn có thể thử 'std :: shared_ptr' từ libC++. Bạn phải chọn libC++ trong cài đặt "C++ Standard Library" (nó không phải là mặc định). –

+0

Tôi dường như nhớ rằng đã có một vấn đề với việc tăng shared_ptr có một bản sao đã bị xóa, dựa trên một mẫu hàm tạo để thực hiện sao chép và được ưa chuộng. Các phiên bản sau này đã khắc phục được sự cố đó. –

3

Với C++ 0x hỗ trợ các con trỏ thông minh tăng xác định các hàm tạo di chuyển. Tuy nhiên, điều này sẽ vô hiệu hóa việc sao chép ngầm bởi trình tạo bản sao được tạo tự động và toán tử gán.

Có một bản vá cho các con trỏ thông minh của công cụ cải tiến, giúp tái tạo các trình tạo bản sao và toán tử gán nếu hỗ trợ cho C++ 0x được phát hiện. Có thể tìm thấy ở đây: https://svn.boost.org/trac/boost/changeset/73202

1

Tôi đã gặp phải vấn đề tương tự, khi một trong các thành viên của lớp học của tôi không có nhà xây dựng mặc định nữa.

struct OrderContact { 
    std::string name; 
    std::string phone; 
    OrderContact() {} // error without this constructor 
    OrderContact(std::string contactName, std::string contactPhone) : name(contactName), phone(contactPhone) { 
    } 
}; 

class Order { 
public: 
    OrderContact contact; 
} 
+1

+1, tôi đã gặp phải thông báo lỗi tương tự hôm nay và đây là nguyên nhân của tôi. –

+0

Tương tự, đã gặp phải sự cố này và đã được khắc phục bằng một ctor mặc định – Graeme

+0

Tại sao lại là downvote? Xin giải thích, tôi rất háo hức muốn học. – Sebastian

Các vấn đề liên quan