1

このエラーが発生します:

fatal error LNK1169: one or more multiply defined symbols found

以下は、コードを含む2つのファイルです。ファイル1にはmain()関数があり、2番目のファイルに記述されている関数を呼び出していますlinklist.cpp。よろしくお願いします。

ファイル1-main.cpp

#include "stdafx.h"
# include "linklist.cpp"


int main(int argc, _TCHAR* argv[])
{
    node *link_list2;
    link_list2 = createList(31);
    addFront(link_list2,33);
    printList(link_list2);
    printf("Hello There Omer Obaid khan\n");
    return 0;
}

ファイル2-linklist.cpp

# include "stdafx.h"
# include <stdlib.h>
struct node{
    node * next;
    int nodeValue;

};

node* initNode(int number);
node* createList (int value);
void addFront (node *head, int num );
void deleteFront(node*num);
void destroyList(node *list);
int getValue(node *list);

node*createList (int value)  /*Creates a Linked-List*/
{
    node *dummy_node = (node*) malloc(sizeof (node));
    dummy_node->next=NULL;
    dummy_node->nodeValue = value;
    return dummy_node;
}


void addFront (node *head, int num ) /*Adds node to the front of Linked-List*/
{
    node*newNode = initNode(num);   
    newNode->next = NULL;
    head->next=newNode;
    newNode->nodeValue=num;
}

void deleteFront(node*num)   /*Deletes the value of the node from the front*/
{
    node*temp1=num->next;

    if (temp1== NULL) 
    {
        printf("List is EMPTY!!!!");
    }
    else
    {
        num->next=temp1->next;
        free(temp1);
    }

}

void destroyList(node *list)    /*Frees the linked list*/
{
    node*temp;
    while (list->next!= NULL) 
    {
        temp=list;
        list=temp->next;
        free(temp);
    }
    free(list);
}

int getValue(node *list)    /*Returns the value of the list*/
{
    return((list->next)->nodeValue);
}


void printList(node *list)   /*Prints the Linked-List*/
{

    node*currentPosition;
    for (currentPosition=list->next; currentPosition->next!=NULL; currentPosition=currentPosition->next)  
    {
        printf("%d \n",currentPosition->nodeValue);
    }   
    printf("%d \n",currentPosition->nodeValue);

}

node*initNode(int number) /*Creates a node*/
{
    node*newNode=(node*) malloc(sizeof (node));
    newNode->nodeValue=number;
    newNode->next=NULL;
    return(newNode);
}
4

2 に答える 2

9

後に読むのをやめました# include "linklist.cpp"他の実装ファイルに実装ファイルを含めないでください。(バルクビルドを行っている場合を除きますが、これは疑わしいです)。ヘッダーで宣言を分離し、それらを含め、実装ファイルに定義を保持します。

于 2012-10-04T09:01:18.777 に答える
2

問題を解決するには、次の2つの方法があります。

最初はルチアン・グリゴアの答えで与えられます。別のヘッダーを作成し、メインファイルに含めます。

2つ目は、プロジェクトオプションを使用してビルドからファイルlinklist.cppを除外することです。他の方法では、このファイルは2回ビルドされます:彼自身のビルド中とメインファイルのビルド中です。

ただし、2番目の方法は優れたプログラミングスタイルではありません。ヘッダーファイルを作成することをお勧めします。

于 2012-10-04T09:13:37.080 に答える