2011-11-16 20 views
6

単純な代入文でどのような問題が発生しているかわからなかったので、これを投稿したいと思いました。私は、シンプルなプログラムで構造体や関数を記述してASCII文字の形を描くように求めている宿題をしています。今は私が書いた関数をテストしようとしているだけで、私が書いたDrawShape関数をテストするためにCircle構造体のsymbol要素に値を代入しようとしています。それを* charに代入しようとすると、「エラー: 'const char *'から 'char'への無効な変換」というエラーメッセージが表示されます。私はコード全体を入れますが、それは非常に長く未完成ですが。これについての助けに感謝します。私は取得しています問題は、あなたが文字に単一引用符を使用しなければならない「circle1.char = 『*』」で右メインの初めに"const char *"から "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

これは、あまりにも長い道のりです。 –

+3

あなたは ''*''の代わりに文字列である '' * "'を使用しています。 –

+0

次回は、問題のSHORT(しかし完全な)例を投稿してください... –

答えて

18

です。二重引用符は、(潜在的に単一文字の)文字列リテラルを使用していることを意味します。これは、const char *(定数文字へのポインタ)で表されます。

正しい構文:

circle1.symbol = "*"; 

代わりに、あなたはそれを割り当てるべきである:Circlecircle1.symbol = '*';

1

あなたの定義はsymbolcharで、まだあなたがそれをタイプchar[2]の文字列リテラルを代入しようとすると述べていますa char

0

In C++単一の文字は二重引用符ではなく、一重引用符で書かれていません。'*'ではなく、"*"です。実際には「*」はの2つの文字の配列です。最初の文字は'*'で、2番目の文字は'\0'で、文字列の最後をマークします。

1

あなたは持っている:

circle1.symbol = "*"; 

あなたが必要:

circle1.symbol = '*'; 
0

あなたのサークル構造体の "シンボル" メンバーは、単一のcharとして定義されます。 charを代入しているように見えますが、実際には長さ1の文字列またはchar *を代入しています。違いは次のとおりです。char a = 'a'; char * a = "a";それはすべて引用符で囲まれています。

5

問題はここにある:

circle1.symbol = "*"; 

circle1.symbolcharとして定義されていますが、それまでの文字列(文字の配列)を割り当てています。あなたがする必要があるのは

circle1.symbol = '*'; 
0

circle1.symbol = "*";です。 "*"const char * symbol(あなたの構造体の)であるchar てみてくださいです:circle1.symbol = '*';

関連する問題