2011-11-16 125 views
6

Tôi muốn đăng bài này vì tôi không thực sự chắc chắn về vấn đề tôi gặp phải với câu lệnh gán đơn giản. Tôi đang làm bài tập về nhà yêu cầu tôi viết cấu trúc và chức năng trong một chương trình đơn giản để vẽ ra các hình dạng của các ký tự ASCII. Ngay bây giờ tôi chỉ đang thử kiểm tra các hàm tôi đã viết, và tôi đang cố gán một giá trị cho phần tử biểu tượng của một cấu trúc Circle chỉ để kiểm tra hàm DrawShape mà tôi đã viết. Khi tôi cố gắng gán nó một * char, tôi nhận được một thông báo lỗi nói "lỗi: chuyển đổi không hợp lệ từ 'const char *' thành 'char'". Tôi sẽ đặt toàn bộ mã vào, mặc dù nó rất dài và chưa hoàn thành. Bất kỳ trợ giúp nào với điều này sẽ được đánh giá cao. Vấn đề tôi nhận được là ngay trong phần đầu của chính tại "circle1.char = '*'"Chuyển đổi không hợp lệ từ lỗi "const char *" sang "char"

#include <iostream> 
#include <math.h> 
#include <cstdlib> 
using namespace std; 

const int NUMBER_OF_ROWS = 26; 
const int NUMBER_OF_COLUMNS = 81; 
char drawSpace[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]; 

struct Point{ 
    int x; 
    int y; 
}; 

struct Circle{ 
    Point center; 
    int radius; 
    char symbol; 
    bool buffer[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS]; 
}; 

bool setCircleRadius(Circle &b, int r); 
bool setCircleCenter(Circle &b, int x, int y); 
bool moveCircle(Circle &b, int x, int y); 
void drawCircle (Circle b); 
void lineChars(Line a); 
void circleChars(Circle b); 
void drawShapes(); 

int main() { 
    Circle circle1; 
    circle1.radius = 5; 
    circle1.symbol = "*"; 
    circle1.center.x = 40; 
    circle1.center.y = 10; 

    drawCircle(circle1); 

    return 0; 
} 
+4

Đây là bằng cách nào, cách quá dài. –

+3

Bạn đang sử dụng '" * "', là một chuỗi, thay vì ''*'' là một char. –

+0

Lần sau, hãy đăng ví dụ về sự cố (nhưng hoàn tất) của sự cố ... –

Trả lời

18

Bạn nên sử dụng dấu nháy đơn cho ký tự. Dấu ngoặc kép có nghĩa là bạn đang sử dụng một chuỗi ký tự (có khả năng một ký tự), được biểu diễn dưới dạng const char * (con trỏ đến ký tự không đổi).

cú pháp đúng: circle1.symbol = '*';

1

định nghĩa của bạn về Circle nói rằng symbol là một char, nhưng bạn cố gắng để gán cho nó một chuỗi chữ kiểu char[2]:

circle1.symbol = "*"; 

Thay vào đó, bạn nên gán cho nó a char:

circle1.symbol = '*'; 
0

Trong C++ , một char đơn không được viết với các quites kép nhưng có dấu nháy đơn, tức là '*', không phải là "*". Thực tế "*" là một mảng gồm hai ký tự, chữ cái đầu tiên là '*' và ký tự thứ hai là '\0' để đánh dấu phần cuối của chuỗi.

1

Bạn có:

circle1.symbol = "*"; 

Bạn cần:

circle1.symbol = '*'; 
0

Các "biểu tượng" thành viên của struct Vòng của bạn được định nghĩa là một char duy nhất. Mặc dù có vẻ như bạn đang chỉ định một char, nhưng bạn đang thực sự gán một chuỗi hoặc char * có độ dài 1. Sự khác biệt: char a = 'a'; char * a = "a"; Đó là tất cả trong các dấu ngoặc kép.

5

Vấn đề là ở đây:

circle1.symbol = "*"; 

circle1.symbol được định nghĩa là char, nhưng bạn gán một chuỗi để nó (một mảng ký tự). Những gì bạn cần làm là

circle1.symbol = '*'; 
0

Lỗi của bạn ở dòng circle1.symbol = "*";. "*" là một const char * symbol (của struct của bạn) là một char Hãy thử: circle1.symbol = '*';

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