Tôi có lớp cơ sở trông giống như sau.Gọi hàm tạo cơ sở mẫu trong lỗi danh sách khởi tạo thành viên
template<typename T>
class Base
{
public:
Base(int someValue);
virtual T someFunc() =0;
};
template<typename T>
Base<T>::Base(int someValue)
{}
Và sau đó làm như sau.
#include "base.hpp"
class Foo
: public Base<Foo>
{
public:
Foo(int someValue);
virtual Foo someFunc();
};
Foo::Foo(int someValue)
: Base(someValue)
{}
Tôi nhận được lỗi sau từ gcc 4.2.1.
error: class ‘Foo’ does not have any field named ‘Base’
Tôi nên đề cập đến việc biên dịch này tốt trên hộp Fedora của tôi đang chạy gcc 4.6.2. Lỗi này xảy ra khi biên dịch trên máy os x Lion của tôi.
Cảm ơn bạn đã trợ giúp.
EDIT
Có vẻ như tôi không chỉ định loại mẫu trong lớp Foo khi gọi hàm tạo. Sau đây sửa lỗi trong os x.
: Base<Foo>(someValue, parent)
EDIT
Có điều này trông giống như một lỗi. Những gì tôi đã đề cập trước khi sửa lỗi dưới os x và mã biên dịch tốt trong fedora với sửa chữa đó. Sẽ đi và xem nếu có một bản cập nhật cho gcc trong os x.
[Qt có thể được trừu tượng ra từ này hoàn toàn.] (Http://ideone.com/tSWdI) –
Dup? http://stackoverflow.com/questions/3829040/scope-problems-in-template-c –