봐주시는 분들 꼭 복 받으실 겁니다 한번만 봐주세요!ㅠㅠ c++입니당

익명 사용자의 이미지

이 코드에서

Error LNK2019 unresolved external symbol _WinMain@16 referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) Win32Project2 C:\Users\samsung\Desktop\example\Win32Project2\Win32Project2\MSVCRTD.lib(exe_winmain.obj)
라는 에러가 자꾸 뜨는데 왜 이럴까요?ㅠㅠㅠ

#include
#include
#include

using namespace std;
#define MAX_ELEMENT 20
#define m 100
int n = 8;
int W[9][9] = { m, m, m, m, m, m, m, m, m,
m, 0, 5, 8, m, m, m, m, m,
m, m, 0, 4, m, 4, m, m, m,
m, m, m, 0, 2, m, m, 5, m,
m, m, m, m, 0, m, m, m, 7,
m, 1, m, m, m, 0, m, m, m,
m, m, 6, m, m, 2, 0, m, m,
m, m, m, m, 7, m, 8, 0, m,
m, m, m, m, m, m, 5, 4, 0 };

typedef struct
{
int level;
int path[10];
int bound;
}node;

typedef struct
{
node heap[MAX_ELEMENT];
int heap_size;
}HeapType;

void insert(HeapType *h, node item)
{
int i;
h->heap_size++;
i = h->heap_size;

while ((i != 1) && (item.bound < h->heap[i / 2].bound)) {
h->heap[i] = h->heap[i / 2];
i /= 2;
}
h->heap[i] = item;
}

node delete1(HeapType *h)
{
int parent, child, i;
node item, temp;

item = h->heap[1];
temp = h->heap[(h->heap_size)];
h->heap_size--;

parent = 1;
child = 2;

while (child <= h->heap_size) {
if ((child < h->heap_size) && (h->heap[child].bound) >(h->heap[child + 1].bound))
child++;
if (temp.bound <= h->heap[child].bound) break;
h->heap[parent] = h->heap[child];
parent = child;
child *= 2;
}
h->heap[parent] = temp;

return item;
}

bool empty(HeapType *h)
{
bool switch_;
switch_ = false;
if (h->heap_size == 0) switch_ = true;
return switch_;
}
void init(HeapType *h)
{
h->heap_size = 0;
}

int bound(node u)
{
int result_bound = 0;
int min = m;
int i, j;
int check[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
if (u.level == 0) {
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++) {
if (W[i][j] != 0 && min > W[i][j]) min = W[i][j];
}
result_bound += min;
min = m;
}
}
else {
for (i = 2; i <= n; i++) {
if (u.path[i] != 0) {
result_bound += W[u.path[i - 1]][u.path[i]];
check[u.path[i]] = 1;
}
}
for (i = 2; i <= n; i++)
for (i = 2; i <= n; i++) {
if (u.path[i + 1] > 0) continue;
else {
for (j = 1; j <= n; j++) {
if (W[i][j] != 0 && min > W[i][j]) {
if (check[j] == 1) continue;
if (check[i] == 1 && j == 1) continue;
min = W[i][j];
}
}
result_bound += min;
min = m;
}
}
}
return result_bound;
}

int length(node u)
{
int result_length = 0;
int i;
for (i = 2; i <= n + 1; i++)
result_length += W[u.path[i - 1]][u.path[i]];

return result_length;
}

void travel2()
{
HeapType PQ;
node u, v;
int minlength, i, j, k;
int test[9] = { -1, -1, 2, 3, 4, 5, 6, 7, 8 };
int opttour[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int stop, temp;

init(&PQ);
v.level = 0;
for (i = 0; i <= n + 1; i++) {
if (i == 1) v.path[i] = 1;
else v.path[i] = 0;
}
v.bound = bound(v);
minlength = m;
insert(&PQ, v);
while (!empty(&PQ)) {
v = delete1(&PQ);
if (v.bound < minlength) {
u.level = v.level + 1;

for (i = 2; i <= n; i++) {
for (j = 1; j <= n + 1; j++)
u.path[j] = v.path[j];
stop = 0;
for (j = 2; j <= n; j++) {
if (u.path[j] == i) stop = 1;
if (j == n) u.path[u.level + 1] = i;
}
if (stop == 1) continue;
if (u.level == n - 2) {
for (j = 2; j <= n; j++)
test[u.path[j]] = -1;
for (j = 2; j <= n; j++)
if (test[j] != -1) temp = j;
u.path[n] = temp;
u.path[n + 1] = 1;
test[2] = 2; test[3] = 3; test[4] = 4; test[5] = 5;
test[6] = 6; test[7] = 7; test[8] = 8;
if (length(u) < minlength) {
minlength = length(u);
for (j = 1; j <= n + 1; j++)
opttour[j] = u.path[j];
}
}
else {
u.bound = bound(u);
if (u.bound < minlength)
insert(&PQ, u);
}
}
}
}
for (i = 1; i <= n + 1; i++) {
if (i == 1) printf("최종경로 : %d -> ", opttour[i]);
else if (i == n + 1) printf("%d 입니다.", opttour[i]);
else printf(" %d -> ", opttour[i]);
}
printf("\n최적의 거리는 %d 입니다.\n", minlength);
}
main()
{
travel2();
system("pause");
}

세벌의 이미지

아래 두 개 링크 잘 읽어보면 좋은 일이 있을 거예요.

https://kldp.org/node/158191

https://wiki.kldp.org/wiki.php/DocbookSgml/Beginner_QA-KLDP#AEN70

박철완 (아이언팍)@Google의 이미지

#include
#include
#include
 
using namespace std;
#define MAX_ELEMENT 20
#define m 100
int n = 8;
int W[9][9] = { m, m, m, m, m, m, m, m, m,
                m, 0, 5, 8, m, m, m, m, m,
                m, m, 0, 4, m, 4, m, m, m,
                m, m, m, 0, 2, m, m, 5, m,
                m, m, m, m, 0, m, m, m, 7,
                m, 1, m, m, m, 0, m, m, m,
                m, m, 6, m, m, 2, 0, m, m,
                m, m, m, m, 7, m, 8, 0, m,
                m, m, m, m, m, m, 5, 4, 0 };
 
typedef struct
{
    int level;
    int path[10];
    int bound;
}node;
 
typedef struct
{
    node heap[MAX_ELEMENT];
    int heap_size;
}HeapType;
 
void insert(HeapType *h, node item)
{
    int i;
    h->heap_size++;
    i = h->heap_size;
 
    while ((i != 1) && (item.bound < h->heap[i / 2].bound)) {
        h->heap[i] = h->heap[i / 2];
        i /= 2;
    }
    h->heap[i] = item;
}
 
node delete1(HeapType *h)
{
    int parent, child, i;
    node item, temp;
 
    item = h->heap[1];
    temp = h->heap[(h->heap_size)];
    h->heap_size--;
 
    parent = 1;
    child = 2;
 
    while (child <= h->heap_size) {
        if ((child < h->heap_size) && (h->heap[child].bound) >(h->heap[child + 1].bound))
            child++;
        if (temp.bound <= h->heap[child].bound) break;
        h->heap[parent] = h->heap[child];
        parent = child;
        child *= 2;
    }
    h->heap[parent] = temp;
 
    return item;
}
 
bool empty(HeapType *h)
{
    bool switch_;
    switch_ = false;
    if (h->heap_size == 0) switch_ = true;
    return switch_;
}
void init(HeapType *h)
{
    h->heap_size = 0;
}
 
int bound(node u)
{
    int result_bound = 0;
    int min = m;
    int i, j;
    int check[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    if (u.level == 0) {
        for (i = 1; i <= n; i++) {
            for (j = 1; j <= n; j++) {
                if (W[i][j] != 0 && min > W[i][j]) min = W[i][j];
            }
            result_bound += min;
            min = m;
        }
    }
    else {
        for (i = 2; i <= n; i++) {
            if (u.path[i] != 0) {
                result_bound += W[u.path[i - 1]][u.path[i]];
                check[u.path[i]] = 1;
            }
        }
        for (i = 2; i <= n; i++)
            for (i = 2; i <= n; i++) {
                if (u.path[i + 1] > 0) continue;
                else {
                    for (j = 1; j <= n; j++) {
                        if (W[i][j] != 0 && min > W[i][j]) {
                            if (check[j] == 1) continue;
                            if (check[i] == 1 && j == 1) continue;
                            min = W[i][j];
                        }
                    }
                    result_bound += min;
                    min = m;
                }
            }
    }
    return result_bound;
}
 
int length(node u)
{
    int result_length = 0;
    int i;
    for (i = 2; i <= n + 1; i++)
        result_length += W[u.path[i - 1]][u.path[i]];
 
    return result_length;
}
 
void travel2()
{
    HeapType PQ;
    node u, v;
    int minlength, i, j, k;
    int test[9] = { -1, -1, 2, 3, 4, 5, 6, 7, 8 };
    int opttour[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    int stop, temp;
 
    init(&PQ);
    v.level = 0;
    for (i = 0; i <= n + 1; i++) {
        if (i == 1) v.path[i] = 1;
        else v.path[i] = 0;
    }
    v.bound = bound(v);
    minlength = m;
    insert(&PQ, v);
    while (!empty(&PQ)) {
        v = delete1(&PQ);
        if (v.bound < minlength) {
            u.level = v.level + 1;
 
            for (i = 2; i <= n; i++) {
                for (j = 1; j <= n + 1; j++)
                    u.path[j] = v.path[j];
                stop = 0;
                for (j = 2; j <= n; j++) {
                    if (u.path[j] == i) stop = 1;
                    if (j == n) u.path[u.level + 1] = i;
                }
                if (stop == 1) continue;
                if (u.level == n - 2) {
                    for (j = 2; j <= n; j++)
                        test[u.path[j]] = -1;
                    for (j = 2; j <= n; j++)
                        if (test[j] != -1) temp = j;
                    u.path[n] = temp;
                    u.path[n + 1] = 1;
                    test[2] = 2; test[3] = 3; test[4] = 4; test[5] = 5;
                    test[6] = 6; test[7] = 7; test[8] = 8;
                    if (length(u) < minlength) {
                        minlength = length(u);
                        for (j = 1; j <= n + 1; j++)
                            opttour[j] = u.path[j];
                    }
                }
                else {
                    u.bound = bound(u);
                    if (u.bound < minlength)
                        insert(&PQ, u);
                }
            }
        }
    }
    for (i = 1; i <= n + 1; i++) {
        if (i == 1) printf("최종경로 : %d -> ", opttour[i]);
        else if (i == n + 1) printf("%d 입니다.", opttour[i]);
        else printf(" %d -> ", opttour[i]);
    }
    printf("\n최적의 거리는 %d 입니다.\n", minlength);
}
main()
{
    travel2();
    system("pause");
}
박철완 (아이언팍)@Google의 이미지

질문하기 이전에 들여쓰기랑 코드 하이라이트정도는 해줘야 보는사람이 편히 답변 할 수 있어요..
일단 아무것도 include하지 않은 #include 부터 보셔야 할듯. 그리고 main함수가 있지만 문법상으로는 없네요. :(

WinAPI의 이미지

main을 정의했는데 WinMain을 찾고 있다는 것은 대개 Visual Studio에서 프로젝트를 만들 때 Win32 콘솔 프로젝트가 아닌 Win32 프로젝트를 선택한 경우의 문제입니다.

아래 링크를 참조해서 제대로 만드세요.

https://msdn.microsoft.com/ko-kr/library/6765tta0.aspx

사족: main 함수 정의에 반환 타입(int)이 없는데, 실수로 누락하신 것이 아니라면 이건 오래된 C 문법입니다. 프로그래밍을 새로 배우는 입장이라면 좀 더 최신 입문서를 찾아보시는 걸 추천합니다.

댓글 달기

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