Accelerated C++ 교재로 공부하신 분들께 질문입니다.

trlight의 이미지

안녕하세요~

지금 Accelerated C++로 공부하고 있는 학생입니다.

지금 챕터 5까지 본 상황인데요.. 너무너무 의문점이 많아서 질문 드립니다.

이 책에 나와있는 소스들이 컴파일 안되는 게 좀 많은거 같습니다.(몇개는 컴파일러 업데이트를 해서 잡았습니다만;;)

아님 제가 못해서 이런건지;;; 예제들의 로직은 전부 다 이해했습니다만 잘 되는게 없습니다. ㅠㅠ(챕터 4 예제)

또한 어느 함수를 사용함에 있어 어떤 헤더파일을 인클루드 해야하는지도 기술되어 있지 않아서 초보인 저로썬 애를 많이 먹네요;;

저만 이런것인지, 아님 이 교재로 공부하신 다른 분들께서는 소스 실행하는데 어려움이 없으셨는지 궁금합니다.

많은 분들의 도움 부탁드릴께요~

winner의 이미지

좀더 자세히 적어주시면 좋겠네요.

책의 예제를 해보는데 compile 이 안된다면 이미 coding 을 하셨다는 이야기신데 붙여넣기로 올려주시면 가능한 답변을 해드리겠습니다.

Accelerated C++ 는 훌륭한 책이지만 번역상태는 정말 마음에 안 들었습니다.
오자도 너무 많더군요...

오늘 군대에서 휴가나왔는데 20일에 복귀합니다.
그전에 올려주시면 답변드리겠습니다.

참고로 제 책은 지금 부대내 내무실에 있습니다.. -_-;

trlight의 이미지

아.. 가뭄에 단비같은 답변이네요 ㅠㅠ 도움을 주신다니 감사합니다.
전부 공부를 하셨다니 다 아시겠다고 생각하고 올리겠습니다^^
먼저 main. cpp 입니다.

#include<algorithm>
#include<iomanip>
#include<ios>
#include<iostream>
#include<stdexcept>
#include<string>
#include<vector>
#include "grade.h"
#include "Student_info.h"
#include "median.h"

using namespace std;

int main()
{
	vector<Student_info> students;
	Student_info record;
	string::size_type maxlen = 0;

	while(read(cin, record)) {
		maxlen = max(maxlen, record.name.size() );
		students.push_back(record);
	}

	sort(students.begin(), students.end(), compare);

	for(vector<Student_info>::size_type i =0;
	i != students.size(); ++i) {
		cout << students[i].name
			<< string(maxlen + 1 - students[i].name.size(), ' ');

		try {
			double final_grade = grade(students[i]);
			streamsize prec = cout.precision();
			cout << setprecision(3) << final_grade
				<< setprecision(prec);
		} catch (domain_error e) {
			cout << e.what();
		}
		cout << endl;
	}
	return 0;
}

그다음 Student_info.h 입니다.

#ifndef GUARD_Student_info_h
#define GUARD_Student_info_h

#include<iostream>
#include<string>
#include<vector>

struct Student_info {
	std::string name;
	double midterm, final;
	std::vector<double> homework;
};

bool compare(const Student_info&, const Student_info&);
std::istream& read(std::istream&, Student_info&);
std::istream& read_hw(std::istream&, std::vector<double>&);
#endif

Student_info.cpp입니다.

#include "Student_info.h"
using namespace std;

bool compare(const Student_info& x, const Student_info& y)
{
	return x.name < y.name;
}

istream& read(istream& is, Student_info& s)
{
	cout << "Enter the name : ";
	is >> s.name ;
	cout << "Enter the midterm :;
	is >> s.midterm;
	cout << "Enter the final :";
	is >> s.final;
	read_hw(is, s.homework);
	return is;
}

istream& read_hw(istream& in, vector<double>& hw)
{
	if(in) {
		hw.clear();
		double x;
		while (in >> x)
			hw.push_back(x);
		in.clear();
	}
	return in;
}

median.h입니다.

#ifdef GUARD_median_h
#define GUARD_median_h
#include<vector>
double median(std::vector<double>);
#endif

median.cpp입니다.

#include<algorithm>
#include<stdexcept>
#include<vector>

using namespace std;

double median(vector<double> vec)
{
	typedef vector<double>::size_type vec_sz;

	vec_sz size = vec.size();
	if (size == 0)
		throw domain_error("median of an empty vector");

	sort(vec.begin(), vec.end());

	vec_sz mid = size/2;

	return size % 2 == 0 ? (vec[mid] + vec[mid+1]) /2 : vec[mid];
}

grade.h입니다.

#ifdef GUARD_grade_h
#define GUARD_grade_h
#include<vector>
#include "Student_info.h"
double grade(double, double, double);
double grade(double, double, const std::vector<double>&);
double grade(const Student_info&);
#endif

grade.cpp입니다.

#include<iostream>
#include<vector>
#include "grade.h"
#include "median.h"
#include "Student_info.h"

using std::domain_error; using std::vector;

double grade(double midterm, double final, double homework)
{
	return 0.2 * midterm  0.4 * final + 0.4 * homework;
}


double grade(double midterm, double final, const vector<double>& hw)
{
	if (hw.size() == 0)
		throw domain_error("student has done no homework");
	return grade(midterm, final, median(hw));
}


double grade(const Student_info& s)
{
	return grade(s.miterm, s.final, s.homework);
}

이상 헤더파일 3개와 cpp파일 3개입니다.
내용이 좀 깁니다만은... 챕터 4의 각 예제들이 각 파일설명인지라;;;
에러메시지 부분은요..

--------------------Configuration: main - Win32 Debug--------------------
Compiling...
main.cpp
D:\Visual_C++6.0\Chap4\main.cpp(33) : error C2065: 'grade' : undeclared identifier
Error executing cl.exe.

main.exe - 1 error(s), 0 warning(s)

너무 조잡해서 도움주시기 곤란하시겠지만... 부탁드립니다~

언제나 부족하다.

binul의 이미지

(대충 봤습니다.)
median.h 와 grade.h 의 첫째줄에
#ifdef 으로 되어있는데
#ifndef 아닌가요?

--------------------------------
그래날아보자꾸나

ctcquatre의 이미지

컴파일 다 됩니다.

제가봐도 #indef쪽의 문제같군요.

간혹가다 VC에서 문제가 있긴한데 이건 책앞에 있는 accelerated홈페이지에
가면 친절하게 바꾸어야할 코드까지 다 설명해놨습니다.

Chaos to Cosmos,
Chaos to Chaos,
Cosmos to Cosmos,
Cosmos to Chaos.

trlight의 이미지

아.. 문제는 찾았네요~ 정말감사합니다^^
근데 STLport 설치를 했는데 이런 에러메시지가 뜨네요.
--------------------Configuration: main - Win32 Debug--------------------
Linking...
LINK : fatal error LNK1104: cannot open file "stlport_vc6_static.lib"
Error executing link.exe.

main.exe - 1 error(s), 0 warning(s)

곽용재님의 위키에서 설치가이드를 보고 따라했는데요..;;
아~ 초보라 참 힘드네요 ㅠㅠ
위에 답변주신 분들 정말 감사합니다~ 꼼꼼하게 보는 습관을 좀 길러야겠어요~^^;;

언제나 부족하다.

죠커의 이미지

혹시 번역서라면 소스에 오타가 상당 수 있더군요.

그리고 Accelerated C++을 Visual C++ 6.0에서 사용하는 것은 최악의 선택입니다. max와 같이 이름이 바뀐 코드들도 있지만 템플릿 관련한 몇개의 코드들이 사소한 문제를 일으켜 공부보다는 다른 것에 집중하게 만듭니다.

윈도우즈 프로그래밍을 지금 공부하시는게 아니라면 Visual C++ 6.0을 버리세요.

doldori의 이미지

trlight wrote:
근데 STLport 설치를 했는데 이런 에러메시지가 뜨네요.
--------------------Configuration: main - Win32 Debug--------------------
Linking...
LINK : fatal error LNK1104: cannot open file "stlport_vc6_static.lib"
Error executing link.exe.

main.exe - 1 error(s), 0 warning(s)


STLport는 stream, locale 같은 몇몇 컴포넌트를 바이너리 라이브러리로 빌드해야
합니다. 빌드를 하지 않았거나 빌드를 해놓고 라이브러리 경로를 지정하지 않으셨군요.
VC++6.0을 써야 할 상황이라면 STLport는 매우 좋은 선택입니다. STLport의
설치 문서를 찬찬히 읽어보세요.

그런데 AC++에 VC++6.0으로 컴파일되지 않는 코드가 있었던가요? 기억이 나지
않네요. ^^;

죠커의 이미지

typedef등의 사소한 문제들이 있습니다. 간단하게 수정할 수 있습니다만 Accelerated C++의 읽는 독자를 고려할때 책 자체의 내용보다 디버깅에 집중할 수 있는 VC++ 6.0은 좋은 선택이 아니라고 생각합니다.

kihongss의 이미지

VC++ 6.0은 최근까지 서비스팩이 릴리즈되고 있지만(작년에 나온sp 6)
C++의 최신 문법을 적용하기에는 무리가 따릅니다. 특히, STL을 쓰기위해서는 몇가지 문제로 인해
stlPort도 설치해줘야하는데, 조금 귀찮죠. :wink:

얼마전에 MSDN Connection 커뮤니티인가에 가입했더니
VS 2005 bete 2가 날라왔더군요. 구지 이런 무거운 툴까지는 설치할 필요는 없고, 닷넷을 설치해야하는 부담을 감수하시겠다면 vc++ 2005 expression도 쓸만합니다.

이것저것 귀찮고 쉽게쉽게 쓰고 싶다 그러면 역시 g++이 :D

htna의 이미지

STLPort는 업데이트가 되지 않는걸로 알고 있는데..
요즘에는 업데이트 되나요 ??

WOW Wow!!!
Computer Science is no more about computers than astronomy is about telescopes.
-- E. W. Dijkstra

doldori의 이미지

htna wrote:
STLPort는 업데이트가 되지 않는걸로 알고 있는데..
요즘에는 업데이트 되나요 ??

그럼요. 올해 3월 1일에 베타 버전을 릴리스했는데요. archive를 보니까 업데이트가
몇 년간 되지 않았던 적이 있긴 하네요.
죠커의 이미지

doldori wrote:
htna wrote:
STLPort는 업데이트가 되지 않는걸로 알고 있는데..
요즘에는 업데이트 되나요 ??

그럼요. 올해 3월 1일에 베타 버전을 릴리스했는데요. archive를 보니까 업데이트가
몇 년간 되지 않았던 적이 있긴 하네요.

업데이트가 된 것이 다행인지 그 동안 안되었던 것이 다행인지 모르겠습니다. :-)

rhizome의 이미지

게시판을 검색하다가 우연히 이 글타래를 발견해서 글을 올립니다. 이미 군에 복귀해서 못보게 되실 수도 있겠네요.

DevC++과 MinGW를 이용하는 편이 훨씬 손쉬운 방법이겠지만,

혹시 Visual C++ 컴파일러를 꼭 써야 되는 거라면 Visual C++ 6.0보다 최근에 M$에서 공개한 Visual C++ Toolkit을 써보시는 것도 괜찮을 것 같은데요. 이 툴킷은 Visual Studio .NET 2003 Professional에 함께 들어있는 컴파일러를 포함하고 있습니다.

http://msdn.microsoft.com/visualc/vctoolkit2003/

이 사이트에 들어가서 읽어보면 아시겠지만 표준 라이브러리가 포함되어 있어서 화인해 보지 않았지만 Acc. C++에 있는 코드도 잘 컴파일 될 것 같네요. -- 제가 들은 바로는 Visual C++ .NET에 들어와서는 템플릿 관련 기능을 상당히 충실이 구현하고 있는 것 같았습니다.

뭐... 직접 명령어를 쳐서 컴파일 하는 방법을 알아야 한다는 것이 불편하긴 합니다만. 위 링크에 가보면 커맨드 라인 프롬프트에서 코드를 컴파일하는 방법도 나와 있으니 그리 어렵진 않으실 겁니다.

거짓말이 없다는 것은 현대성보다도 사상보다도
백배나 더 중요한 일이다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.