2010-02-15 100 views
18

Tôi đang thử một ví dụ từ sách C++ của Bjarne Stroustrup, ấn bản thứ ba. Trong khi triển khai một hàm khá đơn giản, tôi nhận được lỗi thời gian biên dịch sau:lỗi biên dịch C++: ISO C++ cấm so sánh giữa con trỏ và số nguyên

error: ISO C++ forbids comparison between pointer and integer 

Điều gì có thể gây ra điều này? Đây là mã. Lỗi nằm ở dòng if:

#include <iostream> 
#include <string> 
using namespace std; 
bool accept() 
{ 
    cout << "Do you want to proceed (y or n)?\n"; 
    char answer; 
    cin >> answer; 
    if (answer == "y") return true; 
    return false; 
} 

Cảm ơn!

+10

y trong mã của bạn là một chuỗi chữ (dấu ngoặc kép) ' ""', một char chỉ là (dấu nháy đơn) '''' – Alex

+1

Kiểm tra đánh máy của bạn. Ví dụ trong Stroustup có 'char answer = 0;' và 'if (answer == 'y') trả về true;'. –

Trả lời

30

Bạn có hai cách để sửa lỗi này. Cách ưa thích là sử dụng:

string answer; 

(thay vì char). Cách có thể khác để khắc phục sự cố là:

if (answer == 'y') ... 

(lưu ý dấu ngoặc kép thay vì gấp đôi, đại diện cho hằng số char).

4

Bạn cần thay đổi các dấu ngoặc kép đó thành đĩa đơn. tức là. if (answer == 'y') trả về true;

Dưới đây là một số thông tin về chuỗi Literals trong C++: http://msdn.microsoft.com/en-us/library/69ze775t%28VS.80%29.aspx

+1

Bạn có nghĩa là dấu ngoặc kép không thể hoán đổi trong C++? – Morlock

+4

Không, dấu ngoặc kép là 'char []' (một loạt ký tự), dấu nháy đơn là một 'char' duy nhất. –

+0

vừa đăng liên kết cho bạn tới thư viện msdn. – Craig

2

"y" là một chuỗi/mảng/con trỏ. 'y' là loại char/không thể tách rời

6

Chuỗi ký tự được phân cách bằng dấu ngoặc kép và thuộc loại char * chứ không phải char.

Ví dụ: "hello"

Vì vậy, khi bạn so sánh một char đến một char * bạn sẽ nhận được rằng lỗi biên dịch tương tự.

char c = 'c'; 
char *p = "hello"; 

if(c==p)//compiling error 
{ 
} 

Để khắc phục sử dụng ký tự được phân cách bằng dấu nháy đơn.

Ví dụ: 'c'

0

Bạn phải nhớ sử dụng dấu nháy đơn cho hằng số char. Vì vậy, sử dụng

if (answer == 'y') return true;

Thay vì

if (answer == "y") return true;

Tôi thử nghiệm này và nó hoạt động

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