2011-08-22 48 views
33

Tôi nhận được lỗi: số nhận dạng "chuỗi" không xác định.số nhận dạng "chuỗi" không xác định?

Tuy nhiên, tôi bao gồm chuỗi.h và trong tệp chính của tôi, mọi thứ đều hoạt động tốt.

Mã sản phẩm:

#pragma once 
#include <iostream> 
#include <time.h> 
#include <string.h> 

class difficulty 
{ 
private: 
    int lives; 
    string level; 
public: 
    difficulty(void); 
    ~difficulty(void); 

    void setLives(int newLives); 
    int getLives(); 

    void setLevel(string newLevel); 
    string getLevel(); 
}; 

một người nào đó có thể vui lòng giải thích cho tôi tại sao điều này lại xảy ra?

+3

Như một lời nhận xét bên, bạn nên sử dụng bao gồm bảo vệ trong mã của bạn. Nếu trình biên dịch của bạn hoạt động tốt hơn với chỉ thị '#pragma once', hãy kết hợp hai:' #ifndef XXX_HEADER // #define XXX_HEADER // #pragma một lần // ... // # endif' trong đó thứ tự quan trọng (nghĩa là bao gồm bảo vệ kèm theo pragma) –

Trả lời

60

<string.h> là tiêu đề C cũ. C++ cung cấp <string> và sau đó nó sẽ được gọi là std::string.

+3

/facepalm. Tôi cảm thấy như một thằng ngốc. Cảm ơn. – Rhexis

+3

sử dụng không gian tên std – TechplexEngineer

+4

Không 'sử dụng không gian tên std', tôi đã downvoted tất cả các câu trả lời mà đề nghị cho một lý do. – Puppy

8

string được xác định trong không gian tên std. Thay string với std::string, hoặc thêm

using std::string; 

dưới đây include đường của bạn.

Nó có thể hoạt động trong main.cpp vì một số tiêu đề khác có dòng này using trong đó (hoặc một cái gì đó tương tự).

11

Bạn muốn làm #include <string> thay vì chuỗi.h và sau đó chuỗi loại sẽ sống trong không gian tên std, vì vậy bạn sẽ cần phải sử dụng std::string để tham chiếu.

4

Có thể bạn muốn #include<string>, không phải <string.h>. std::string cũng cần một tiêu chuẩn không gian tên hoặc một chỉ thị rõ ràng using.

2

Bạn quên không gian tên mà bạn đang đề cập đến. Thêm

using namespace std;

để tránh std :: string tất cả các thời gian.

+3

Đối với những người downvoted: cảm ơn cho ý kiến ​​xây dựng của bạn: P – m0skit0

+2

'bằng cách sử dụng không gian tên std;' thực sự là xấu, đặc biệt là trong một tiêu đề. – Puppy

+1

Cảm ơn! Bạn có thể giải thích tại sao không? – m0skit0

1

#include <string> sẽ là c đúng ++ bao gồm, bạn cũng cần phải xác định không gian tên với std::string hoặc tổng quát hơn với using namespace std;

2

Bạn phải sử dụng namespace std. Nếu mã này trong main.cpp bạn nên viết

using namespace std; 

Nếu tuyên bố này là trong phần đầu, sau đó bạn không nên bao gồm không gian tên và chỉ cần viết

std::string level; 
Các vấn đề liên quan