Tôi gặp lỗi khi cố gắng biên dịch mã của mình trong g ++ bằng chữ ký hiện tại:
cannot declare member function static void Foo::Bar(std::ostream&, const Foo::Node*) to have static linkage
Câu hỏi của tôi có hai mặt:
- Tại sao nó không biên dịch theo cách này?
- Chữ ký chính xác là gì, và tại sao?
Chữ ký luôn là cái chết của tôi khi sử dụng C ++
Chỉnh sửa: Đây cũng là tệp tiêu đề lớp:
class Foo {
public:
Foo();
~Foo();
bool insert(const Foo2 &v);
Foo * find(const Foo2 &v);
const Foo * find(const Foo2 &v) const;
void output(ostream &s) const;
private:
//Foo(const Foo &v);
//Foo& operator =(const Foo &v);
//Not implemented; unneeded
struct Node {
Foo2 info;
Node *left;
Node *right;
};
Node * root;
static bool insert(const Foo2 &v, Node *&p);
static void output(ostream &s, const Node *p);
static void deleteAll(Node *p);
Bạn nên bao gồm tất cả các dòng có liên quan từ lỗi g ++.
—
Keith Layne
Thông báo lỗi bạn liệt kê không thể được tạo bởi mã bạn đã đăng. Không có
—
Robᵩ
Foo::Bar
bất cứ nơi nào trong đoạn chương trình của bạn. Vui lòng đăng một chương trình hoàn chỉnh , tối thiểu thể hiện lỗi bạn đang gặp phải. Một chương trình hoàn chỉnh là một chương trình mà chúng tôi có thể biên dịch chính xác và nhận được thông báo lỗi giống như bạn. Một chương trình tối thiểu là một chương trình với mỗi dòng không liên quan đến lỗi của bạn được xóa. Đoạn mã bạn đăng không đầy đủ cũng không tối thiểu. Xem sscce.org để biết thêm.