정적배열을 선언함과 동시에 값을 할당하기가 안되네요...
글쓴이: dltkddyd / 작성시간: 월, 2012/02/20 - 11:23오후
myType는 구조체입니다.
struct myType {
int x;
int y;
char* name;
}
그리고 다음과 같이 myType형의 배열을 선언하고 값을 동시에 할당했는데, 컴파일 에러가 발생합니다.
myType mydata[15]={{10,30,"김훤칠"},{110,120,"Goal"},{250,235,"Target"},{335,380,"Guest"},{444,490,"Ring"},{555,580,"Chick"},{660,680,"Tick"},{724,750,"Cloud"},{860,867,"CCL"},{990,980,"Beside Us"},{1102,1020,"Go"},{1130,1135,"Fight"},{1250,1280,"Shot"},{1340,1369,"Fire Up"},{1490,1456,"Walk"}};
어디가 잘못된 건가요?
Forums:
에러메시지를 보여주세요. myType
에러메시지를 보여주세요.
myType mydata[15] 대신 struct myType mydata[15] 로 바꿔보셨나요?
아래와 같은 에러메시지가 뜨는데요.
Collect는 myType과 같습니다. 다음과 같은 진술문이 있기 때문이죠.
typedef Collect myType;
그리고 에러메시지는 아래와 같고요.
note: candidates are: Collect::Collect(Collect&)
note: Collect::Collect(int, int, const char*)
note: Collect::Collect()
error: no matching function for call to 'Collect::Collect(myType)'
뭐 대충 생성자가 없다는 말로 들리는데, 위의 배열하고 생성자가 어떤 연관이 있길래 이런 에러 메시지가 뜰까요? 생성자를 추가로 더 만들어야 될까요? 어떤 생성자를 만들어야 할지 모르겠네요...
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
사용하시는 컴파일러와 실제 소스코드를 올려주시는 것이
사용하시는 컴파일러와 실제 소스코드를 올려주시는 것이 도움이 될 것 같습니다.
gcc 4.6에서 테스트한 결과로는 char*를 const char*로 수정 후 컴파일하는데에 문제가 발생하지 않았습니다.
혹시 Collect가 typedef된 게 아니라 같은 모양의 다른 클래스로 정의된 것 아닌가요?
struct myType mydata[15] 로도 해봤으나, 안 돼요...
왜 안될까요?
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
위 메시지를 보니 그렇게 했을때는 에러 메시지가
위 메시지를 보니 그렇게 했을때는 에러 메시지가 다를것 같은데요... 에러 메시지좀 보여주시죠. 같은말 하기 좀 답답하네요.
구조체 선언을 다음처럼 해보세요. typedef
구조체 선언을 다음처럼 해보세요.
typedef struct
{
int x;
int y;
char *name;
} myType;
변수선언과 값할당이 맞지 않아 생긴 에러입니다.
선언과 할당이 동시에 해서 생기는 오유는 아닙니다.
구조체 myType에 name변수를 Char*로 하면 포인터만 할당되고 실지변수영역은 생기지 않지요.
그런데 여기에 name = "김훤칠" 이라는 값이 대입되였으니 오유가 생길수 밖에...
다시말해 이런 에러입니다.
char* lpName = "HongKilDong"; // 에러
char name[20] = "HongKilDong" ; // 성공
알만하죠.
이렇게 해야 해요.
struct myType {
int x;
int y;
char name[MAX_PATH];
}
name변수의 크기는 자기에게 알맞게 정하면 되고요.
인용: char* lpName =
인용:
char* lpName = "HongKilDong"; // 에러
해보셨나요? 에러 안납니다. 한번 해보세요.
댓글 달기