우분투에서 C++ 프로그래밍에 대해서 질문드립니다.
글쓴이: interoasis / 작성시간: 월, 2011/02/28 - 3:40오후
우분투에서 처음 C++ 프로그래밍을 해보는데 책이 오래된거여서 그런지 맞지않는 몇가지가 있네요.
C++이 처음에 나왔을때랑 문법이 많이 바뀌었나봐요?
책에는 iostream.h라고 나오는데 컴파일시 에러뜨길래 검색해보니 iostream으로 해야한다고,,
거기에 무슨, using namespace std; 구문을 넣어줘야 한다고 하구요.
거기다 책에서 나오는 예제를 그대로 옮겨썼는데 이것역시 제대로 컴파일이 안되더군요.
#include <string> #include <iostream> using namespace std; const int max_len = 255; class string { public: void assign(const char* st) { strcpy(s, st); len = strlen(st); } int length() { return len; } void print() { cout << s << "\nLength: " << len << "\n"; } private: char s[max_len]; int len; }; int main() { string one, two; char three[40] = {"My name is Charles Babbage."}; one.assign("My name is Alan Turing."); two.assign(three); cout << three; cout << "\nLength: " << strlen(three) << endl; if(one.length() <= two.length()) one.print(); else two.print(); }
위가 코드의 전문인데 어떤부분이 잘못된걸까요? 에러메세지를 보니 strcpy와 strlen함수가 선언되지 않았고 string의 언급이 애매하다? 그리고 one과 two가 선언되지 않았다라는 내용이네요. 그리고 또하나 궁금한점은 헤더파일 string은 이 아니고 이 맞나요? 둘다 해도 에러뜨긴 합니다만..
그래도 우분투가 리눅스라 프로그래밍적인 부분에서는 좀 더 편할 줄 알았는데 c++부터는 뭔가 더 불편한 느낌이네요.
Forums:
컴파일해 보지는 않았습니다.~~ #include
컴파일해 보지는 않았습니다.~~
오오~ 에러가 많이 줄었습니다만...
딱 하나의 에러가 남았네요. struct std::string 이 print라는 멤버를 가지고 있지 않다고...
분명 spring클래스안에 print라는 member function이 존재하는데 말이죠;;
그나저나 그 많은 에러들이 위의 구문을 선언해주지 않은거라 그런거였다면 리눅스에서 C++ 프로그래밍은
참 번거로운 작업이군요. -_-;; C프로그래밍 할때만해도 신경쓸게 없었는데 말이죠.. 쩝;;
> 그나저나 그 많은 에러들이 위의 구문을 선언해주지
> 그나저나 그 많은 에러들이 위의 구문을 선언해주지 않은거라 그런거였다면 리눅스에서 C++ 프로그래밍은
> 참 번거로운 작업이군요. -_-;; C프로그래밍 할때만해도 신경쓸게 없었는데 말이죠.. 쩝;;
리눅스뿐만 아니라 어디서든 마찬가지입니다. C++ 은 상당히 verbose 한 언어입니다. 타이핑 양이 많지요.
> 분명 spring클래스안에 print라는 member function이 존재하는데 말이죠;;
위 코드에서 one, two 는 작성하신 string 의 instance 가 아니고, 표준 라이브러리에 있는 std::string 의 instance 입니다.
print 가 없는 게 당연하지요. 아마도 string 을 다시 정의할 수 없다고 에러가 뜰텐데요?
여하튼 여러모로 좋은 예제가 아닙니다. 그냥 이 코드는 잊어버리시고, 새 책으로 공부하세요^^
아, 그렇군요.
한번 괜찮은책있나 여기서 찾아봐야겠네요. 감사합니다. :)
#include 을 지우세요 예제는 직접 만드신
#include <string>을 지우세요
예제는 직접 만드신 string 클래스를 사용하는 것 같은데, 그러면 표준 string 클래스는 있을 필요가 없죠.
또, using std::string 도 마찬가지로 지우시고요.
/*** Signature ******************
* blog: http://blog.bluekyu.me/ *
********************************/
아마도 string헤더파일을 집어넣은 이유는
아마도 string헤더파일을 집어넣은 이유는 string클래스 안에서 쓰인 스트링관련함수들을 갖다쓰기위함이 아니었을까요? strlen이라던지 substr이라던지요.. 말씀하신대로 해봤지만 에러메세지가 늘어나버리네요ㅎㅎ;
다른분들말씀처럼 새 책을 사서 배워야할것 같아요. 조언 감사드립니다.^^
아 그거는 cstring 파일에 있습니다. 그리고
아 그거는 cstring 파일에 있습니다.
그리고 덧붙여서 using namespace std; 대신 using std::cout; 와 using std::cin;을 사용하세요
using namespace std;를 쓰면 표준 string 쪽과 혼동된다고 뭐라 합니다.
ps. 컴파일 해봤습니다.
/*** Signature ******************
* blog: http://blog.bluekyu.me/ *
********************************/
네 제대로 되네요.^^
말씀대로 하니까 제대로 컴파일됩니다. 정성들인 답변해주셔서 감사합니다.^^
C++프로그래밍은 좀더 최신의 정보를 가지고 공부를 해야겠네요.
> 책에는 iostream.h라고 나오는데 컴파일시
> 책에는 iostream.h라고 나오는데 컴파일시 에러뜨길래 검색해보니 iostream으로 해야한다고,,
> 거기에 무슨, using namespace std; 구문을 넣어줘야 한다고 하구요.
그 책 버리십시오. 최근에 나온 책으로 다시 사는 것이 좋겠습니다.
말씀하신 내용으로 봐서는 표준이 완성되기 전에 나온 책인 것 같습니다.
여기서 검색해보시면 C++ 책에 대한 추천을 많이 찾으실 수 있을 겁니다.
아,, 네 그런것 같더군요.
원래 C++책이 아니라 1학년때 C언어 교재로 사용했던 책입니다. C++내용은 끝부분에 살짝 다루고있죠.
여기의 C언어 내용들은 지금에 사용해도 별 문제가 없습니다만(이미 ANSI C가 나온후에 나온책이라서 그런걸까요?)
C++ 내용은 문제되는게 좀 있네요. 번역본 출판년도가 2000년이니, 98년에 표준이 생긴 C++내용을 반영하기가 어려웠던것일까요?
그래도 꽤 유명한 책인데 말이죠. A Book on C라고...
p.s : 헐... 혹시나해서 다른 C책이 있어서 그책을 살펴봤는데 거기에도 iostream.h라고 나오는군요.-_-;; 무슨 저는 고서(!)들만 가지고 있나봅니다. 요건 2002년판."Teach Yourself C" :)
문법이 바뀐게 아니라 표준 라이브러리가
문법이 바뀐게 아니라 표준 라이브러리가 바뀐것입니다.
다음 페이지 중간쯤에 경위가 간단하게 소개되어있습니다.
http://www.winapi.co.kr/clec/cpp3/25-2-2.htm
댓글 달기