2013-03-13 38 views
6

tôi nhận được một vấn đề trong khi kiểu trả về là cấu trúccấu trúc không tên một loại trong C++

Example.h 

class Example { 
private: 
    typedef struct connection_header { 
     string url; 
     string method; 
    }; 

    static connection_header get_connection_header(); 
}; 

Example.cpp 
connection_header Example::get_connection_header() { 
    return NULL; 
} 

Tôi nhận 'connection_header' does not name a type

tôi có thể biết tại sao lỗi này

+0

Lỗi tiếp theo của bạn có thể sẽ là 'không chuyển đổi từ int thành connection_header'. Loại 'NULL' là gì? –

+0

@PeterWood Cảm ơn bạn đã thông báo tôi đến từ java vì vậy chúng tôi thường có thể làm điều đó. Và tôi đã sửa lỗi phát hành – Kathick

Trả lời

8

Bạn đang sử dụng typedef mà không đưa tên cho loại. Chỉ cần thả các typedef, nó không phải là cần thiết ở đây:

struct connection_header { 
    string url; 
    string method; 
}; 

Tiếp theo, connection_header được khai báo bên trong của lớp Example, vì vậy bạn cần phải hội đủ điều kiện đầy đủ tên của nó trong việc thực hiện khi nó là một kiểu trả về:

Example::connection_header Example::get_connection_header() 
+0

Tôi không nghĩ đây là lời khuyên tốt trong C++, bạn sẽ muốn cấu trúc hoạt động như lớp học mà không cần hãy nhập từ khóa 'struct' vào trước tên đối tượng trên tất cả các dấu vị trí. – Lundin

+0

@Lundin nó không phải là tất cả các nơi. Đây là khai báo thực sự của 'struct'. – juanchopanza

+0

Nhưng khi bạn sử dụng cấu trúc, bạn phải gõ 'struct connection_header' vì connection_header không phải là một kiểu, mà là một thẻ struct. – Lundin

1

Đầu tiên, trong C++ (nhưng không phải C) mỗi struct hoặc class là một loại. Vì vậy, nếu bạn khai báo số struct connection_header, bạn cũng có được loại connection_header, vì vậy sau đó bạn có thể khai báo connection_header var một số biến.

Sau đó, typedef cả trong C và C++ đều cần loại và tên. Ví dụ:

typedef long my_number_type; 

tuyên bố my_number_type như một từ đồng nghĩa với long

Vì vậy, như những người khác chỉ ra, thả typedef

2

Hãy thử bên dưới mã trong cpp tập tin, thêm Example:: trước connection_header:

Example::connection_header Example::get_connection_header() { 
    return NULL; 
} 

connection_header được xác định bên trong Example vì vậy bạn nên cung cấp cho nó phạm vi định nghĩa của nó.

Ngoài ra, từ khóa typedef sẽ bị bỏ qua trong C++. Bạn có thể bỏ qua nó

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