2015-04-01 2 views
0

Я делаю программу для кроликов и связанных списков. У меня есть пять файлов: link.h, link.cpp, bunny.h, bunny.cpp, main.cppЯ получаю LNK1169 и LNK2005 независимо от того, что я делаю

Когда я пытаюсь скомпилировать свою программу (используя MVS2013), я получаю две ошибки; LNK1169: Ошибка 3 Ошибка LNK1169: один или несколько умножить определенные символы найдены и LNK2005: LNK2005 Ошибка 2 ошибки: "STRUCT узел * Curr" (CURR @@ 3PAUnode @@?) Уже определены в list.obj

Я понятия не имею, где ошибка, поэтому я сделал некоторые исследования и выяснил, что эти ошибки означают, что я определил что-то более одного раза, но я не могу узнать, где. Я попытался переместить все #includes в один файл, но это тоже не помогло.

Я просканировал свой код, но не смог найти нигде, который подходит для этой ошибки, поэтому теперь я в тупике.

NB! Перед тем, как рассердиться на меня для размещения гигантской стены текста, я не знаю, где ошибка лежит, поэтому я думал, что это было лучше, чтобы включить это все

bunny.h

#ifndef BUNNY_H 
#define BUNNY_H 

#include "stdafx.h" 

#include <string> 

using namespace std; 

class bunny 
{ 
    private: 

     int m_age; 
     char m_gender; 
     bool m_radioactiveVampire; 
     string m_color; 
     string m_name; 

    public: 
     bunny(); 
     void setRadioactiveVampire(bool RV) {m_radioactiveVampire = RV; } 

     string getName(void) { return m_name; } 
     string getColor(void) { return m_color; } 
     bool getRadioactiveVampire(void) { return m_radioactiveVampire; } 
     char getGender(void) { return m_gender; } 
     int getAge(void) { return m_age; } 
}; 
#endif 

кролика. каст

#include "stdafx.h" 

#include <iostream> 

using namespace std; 

/* 16 bunnies */ string maleBunnies[] = { "Abel", "Abraham", "Ace", "Acer", "Achilles", "Acker", "Adagio", "Admiral", "Aesop", "Ajax", "Aladdin", "Alaska", "Albert", "Alchemy", "Alex", "Mark" }; 
/* 16 bunnies */ string femaleBunnies[] = { "Abba", "Aberdeen", "Abigail", "Acura", "Adele", "Adoni", "Aki", "Alibi", "Alice", "Amaretto", "Amaya", "Ambrosia", "Amore", "Amorette", "Anabell", "Anastasia" }; 
/* 8 colors */ string bunnyColors[] = { "Red", "Black", "Yellow", "Gray", "Green", "White", "Blue", "Purple" }; 

bunny::bunny() 
{ 
    m_age = 0; 
    m_color = bunnyColors[rand() % 8 + 1]; 

    if (rand() % 2 + 1 == 1) //calculates what gender and name respectively 
    { 
     m_gender = 'f'; 
     m_name = femaleBunnies[rand() % 16 + 1]; 
    } 
    else if (rand() % 2 + 1 == 2) 
    { 
     m_gender = 'm'; 
     m_name = maleBunnies[rand() % 16 + 1]; 
    } 
    else 
    { 
     cerr << "Uh oh, something went wrong with gender generation"; 
    } 

    if (rand() % 100 + 1 < 2) //calculates 2% chance on radioactive vampire 
    { 
     m_radioactiveVampire = true; 
    } 
    else if (rand() % 100 + 1 > 2) 
    { 
     m_radioactiveVampire = false; 
    } 
    else 
    { 
     cerr << "Uh oh, something went wrong with RV calculation "; 
    } 
} 

main.cpp

#include "stdafx.h" 
#include <ctime> 

using namespace std; 

int main() 
{ 
    srand(time(NULL)); 
    bunnyList list; 
    bunny *b; 

    for (int i = 0; i < 5; i++) 
    { 
     b = new bunny(); 

     list.addBunny(b); 
    } 

    return 0; 
} 

list.h

#ifndef LIST_H 
#define LIST_H 

#include "bunny.h" 
#include "stdafx.h" 

typedef struct node 
{ 
    node *next; 
    bunny *data; 
} *nodePtr; 

nodePtr curr = NULL; 

class bunnyList 
{ 
    private: 

    public: 
     node *head; 

     bunnyList(); 
     void displayAllBunnies(void); 
     void addBunny(bunny *b); // linked list stuff 
     void removeBunny(int bunnyNumber); // linked list stuff 
}; 

#endif  

и последний list.cpp

#include "stdafx.h" 
#include <iostream> 

using namespace std; 

bunnyList::bunnyList() 
{ 
} 

void bunnyList::addBunny(bunny *b) 
{ 
    node *newNode = new node; //creates a node and holds its pointer 
    newNode->data = b; 
    newNode->next = head; 
    head = newNode; 
} 


void bunnyList::displayAllBunnies(void) 
{ 
    curr = head; 

    while (curr != NULL) 
    { 
     cout << curr->data << endl; 
     curr = curr->next; 
    } 
} 

(list.h и bunny.h входит в stdafx.h, это было одно решение, которое не помогло, но они есть)

+0

и я думаю, что вы не должны иметь stdafx.h в файле заголовка. Компилятор игнорирует все до этой строки, что вызовет проблемы. –

ответ

1

You определяет переменные в list.h

nodePtr curr = NULL;

при установке .h в нескольких прозрачна nslation, отчет компилятора определяет один и тот же символ в единицах перевода.

Переместите переменную для .cpp, если вам нужно использовать переменную в нескольких единицах перевода, используйте extern (связанное сообщение с дополнительной информацией об extern).

Чтение кода, нет необходимости объявлять curr в качестве свободной переменной, оно используется только в displayAllBunnies как переменная итерации (которая может быть локальной).

Изменить displayAllBunnies на:

void bunnyList::displayAllBunnies(void) { 
    nodePtr curr = head; 

    while (curr != NULL) { 
     cout << curr->data << endl; 
     curr = curr->next; 
    } 
} 

и удалить строки: nodePtr curr = NULL; из list.h

+0

Перемещено в списке.cpp вместо этого, исправил проблему, спасибо. Я вижу, что вы имеете в виду в последнем предложении – Voluptious

Смежные вопросы