간단한 클래스인데요..

toold의 이미지

class BSTWPageNode
{
                friend class BSTWPage;
private:
	BSTWPageNode();
	//각 데이터들
	int regionNumber;
	int phoneNumber;
	char *lastName;
	char *firstName;
	//노드포인터들
	BSTWPageNode *numberLeft;
	BSTWPageNode *numberRight;
	BSTWPageNode *nameLeft;
	BSTWPageNode *nameRight;
};

class BSTWPage
{
public:
	BSTWPage() {root = NULL; };
                void InsertName(char *fstName, char *lstName);	

	BSTWPageNode *root;
};

void BSTWPage::InsertName(char *fstName, char *lstName)
{
	//객체변수에 값 할당
	strcpy(firstName, fstName);
	strcpy(lastName, lstName);
}

위의 소스에서 firstName가 선언되지 않은 변수라고 나옵니다.
BSTWPage가 BSTWPageNode의 friend로 선언되어 있으니..
firstName을 사용할 수 있지 않나요..?...
클래스를 뭔가 잘못사용한건가요..?
도움 부탁드릴께요...꾸벅..
yui의 이미지

toold wrote:
class BSTWPageNode
{
                friend class BSTWPage;
private:
	BSTWPageNode();
	//각 데이터들
	int regionNumber;
	int phoneNumber;
	char *lastName;
	char *firstName;
	//노드포인터들
	BSTWPageNode *numberLeft;
	BSTWPageNode *numberRight;
	BSTWPageNode *nameLeft;
	BSTWPageNode *nameRight;
};

class BSTWPage
{
public:
	BSTWPage() {root = NULL; };
                void InsertName(char *fstName, char *lstName);	

	BSTWPageNode *root;
};

void BSTWPage::InsertName(char *fstName, char *lstName)
{
	//객체변수에 값 할당
	strcpy(firstName, fstName);
	strcpy(lastName, lstName);
}

위의 소스에서 firstName가 선언되지 않은 변수라고 나옵니다.
BSTWPage가 BSTWPageNode의 friend로 선언되어 있으니..
firstName을 사용할 수 있지 않나요..?...
클래스를 뭔가 잘못사용한건가요..?
도움 부탁드릴께요...꾸벅..

friend는 해당 클래스의 멤버 변수들을 이쪽 클래스에서 정의한 것과 똑같이 만드는 것이 아닙니다.
단지 해당 클래스의 private part에 대한 접근 권한을 갖게 되는 것일 뿐입니다.

다음 비스무리하게 하시면 됩니다.


void BSTWPage::InsertName(char *fstName, char *lstName)
{
        BSTWPageNode *pb = new BSTWPageNode();

        strcpy(pb->firstName, fstName);
        strcpy(pb->lastName, lstName);

        pb->nameLeft = root;

    // 위의 세 문장에서 pb->firstName이 가능한 것이 friend의 효과입니다.

        root = pb;
       // 어쩌구 저쩌구..


	//객체변수에 값 할당
	//strcpy(firstName, fstName);
	//strcpy(lastName, lstName);
}
toold의 이미지

답변 진심으로 감사드립니다...
다시 또 열쒸미..짜고 있는데요..
이번엔 컴파일은 잘 되는데...링크에러(이렇게 부르는게 맞나요..^^;)가 나는데..
이런건 에러메세지를 봐도 도대체 어디가 잘 못 되었다는건지 모르겠습니다..
에러 내용은 다음과 같고요..

Quote:

--------------------Configuration: test - Win32 Debug--------------------
Linking...
test.obj : error LNK2001: unresolved external symbol "public: __thiscall BSTNode::BSTNode(void)" (??0BSTNode@@QAE@XZ)
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

test.exe - 2 error(s), 0 warning(s)

#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<stdlib.h>

enum Boolean { FALSE, TRUE};

class BSTNode
{
	friend class BST;
public:
	BSTNode();
	//각 데이터들
	int regionNumber;
	//노드포인터들
	BSTNode *numberLeft;
	BSTNode *numberRight;
};

class BST
{
public:
	BST() {root = NULL; };

	void InsertNode(int phone1);						//InsertNumber()와 InsertName()을 호출

	BSTNode *root;
};

void BST::InsertNode(int phone1)
{
	BSTNode* currentNode = root;
	BSTNode* parentNode = 0;

	while(currentNode){
		parentNode = currentNode;
		if(phone1 == currentNode->regionNumber) return;
		if(phone1 < currentNode->regionNumber) currentNode = currentNode->numberLeft;
		else currentNode = currentNode->numberRight;
	}
	
	currentNode = new BSTNode;		//노드생성
	currentNode->numberLeft=0;
	currentNode->numberRight=0;

	//데이터를 넣음
	currentNode->regionNumber = phone1;

	//노드의 위치 조정
	if(!root) root = currentNode;
	else if(phone1 < parentNode->regionNumber) parentNode->numberLeft = currentNode;
	else parentNode->numberRight = currentNode;
}

int main()
{
	int num;

	//입력부분
	printf("Usage : ");
	cin >> num;

	BST *inputNode = new BST();
	inputNode->InsertNode(num);

	return 0;
}

해결해 달라는 말은 염치 없어서 못하고...
이럴 경우엔 어느 부분을 봐야 하는지만이라도 알려주시면 감사하겠습니다..
부탁드립니다..꾸벅..
exsider의 이미지

--------------------Configuration: test - Win32 Debug--------------------
Linking...
test.obj : error LNK2001: unresolved external symbol "public: __thiscall BSTNode::BSTNode(void)" (??0BSTNode@@QAE@XZ)
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

test.exe - 2 error(s), 0 warning(s)

BSTNode 의 기본생성자를 호출할 수 없다는 내용인 것 같습니다.

Quote:
class BSTNode
{
friend class BST;
public:
BSTNode();
//각 데이터들
int regionNumber;
//노드포인터들
BSTNode *numberLeft;
BSTNode *numberRight;
};

혹시 기본생성자를 선언만 해놓고 정의를 안만드신 것 아닌가요???

toold의 이미지

아...그렇군요..
생성자 만들구.. 포인터에 널값 주니까 제대로 되네요..
(맞게 한건진 모르지만.. :D )
감사합니다..
꾸벅...

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.