클래스 생성자가 제대로 호출이 안되는것 같습니다.

머그잔@Naver의 이미지

c++공부하면서 책을 보고 있는데 오류가 이해가 안되서 질문을 합니다.

============Point.h============
#pragma once
class Point
{
public:
 
	void Print() const;
 
	Point();
	Point(int initialX, int initialY);
	Point(const Point& pt);
 
	void SetX(int value);
	void SetY(int value);
	int GetX() const { return x; };
	int GetY() const { return y; };
 
private:
	int x, y;
};
...
=================Point.cpp=============
#include "Point.h"
#include <iostream>
using namespace std;
 
Point::Point(const Point& pt)
{
	x = pt.x;
	y = pt.y;
}
 
Point::Point(int initialX, int initialY)
{
	SetX(initialX);
	SetY(initialY);
}
 
Point::Point()
{
	x = 0;
	y = 0;
}
 
void Point::Print() const
{
	cout << "(" << x << ", " << y << ")\n";
}
...
==================Example.cpp===============
#include "stdafx.h"
#include <iostream>
#include "Point.h"
using namespace std;
 
void Area(const Point& pt);
 
 
int main()
{
	Point pt(50, 50);
 
	Area(pt);
 
    return 0;
}
 
void Area(const Point& pt)
{
	int area = pt.GetX() * pt.GetY();
 
	cout << "(0, 0)과 이점이 이루는 사각형의 면적 =	" << area << endl;
}

를 빌드하면 아래와 같은 오류가 발생합니다.

LNK2019	"public: __thiscall Point::Point(int,int)" (??0Point@@QAE@HH@Z) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.	
LNK1120	1개의 확인할 수 없는 외부 참조입니다.	

제가 보기엔 Point클래스의 객체를 생성할때 생성자를 제대로 못찾아서 그런것 같은데 왜 못찾는 것인지
파악이 안됩니다.

오버로딩된 생성자 중에 매개변수에 맞는 생성자 정의가 있는데 이유를 모르겠습니다.

답변 부탁드리겠습니다.

ehaakdl의 이미지

이런 죄송해요 매개변수로 구분할수 있는데 새벽에 답글 다니까 잘못된걸 달았군용

머그잔@Naver의 이미지

뇌를...C++책을 보고 예제를 따라하는 중인떼
저기서는 저렇게 쓰던거라 생성자를 오버로드 하더라구요.

머그로 커피한잔

DarkSide의 이미지

link 에서 제대로 파일이 링크되지 않은 것 같은데요.

머그잔@Naver의 이미지

이제 책보고 예제 따라 하는중인데
특별히 링크에 대한 말은 없더라구요.

어느 링크를 확인해야 할까요?

머그로 커피한잔

DarkSide의 이미지

IDE 에서 하셨나요? 아니면 빌드 명령어를 보여 주세요.

머그잔@Naver의 이미지

Visual Studio입니다.
콘솔모드 선택해서 새프로젝트로 만들었고 그냥 ctrl+F로 돌려봅니다.

파일첨부했습니다

댓글 첨부 파일: 
첨부파일 크기
Package icon example (2).zip4.72 KB

머그로 커피한잔

 의 이미지

Visual Studio로 열어볼 필요도 없군요.
example.vcxproj를 텍스트 에디터로 열어 보면 진상이 드러납니다.

  <ItemGroup>
    <ClCompile Include="example.cpp" />
    <ClCompile Include="stdafx.cpp">
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <None Include="Point.cpp" />
  </ItemGroup>

Point.cpp가 빌드에 참여하지 않도록 설정됐군요. 왜 그렇게 하셨는지는 모르겠습니다만.

머그잔@Naver의 이미지

제가 아직 Visual Studio를 제대로 사용하는 방법을 몰라서
저렇게 설정 하느 방법도 모릅니다.

왜 저렇게 되었는지 모르겠네요.
설정들을 찾아봤는데 저 설정은 어디서 하는지요?

답변 주시면 감사하겠습니다.

머그로 커피한잔

댓글 달기

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