2014-02-02 2 views
0

Я продолжаю получать неподтвержденную внешнюю ошибку от C++ из Visual Studio 2013. Большое спасибо за вашу помощь до сих пор. Я еще больше уменьшил код до следующей формы (но Проблема сохраняется):Неразрешенные внешние переменные C++ с простым определением класса

main.cpp:

#include "Fibonacci.h" 

using namespace std; 

int main(void){ 

    int RandInteger = 3; 
    Fibonacci Fib(RandInteger); 

} 

Fibonacci.h

class Fibonacci{ 
    public: 
     Fibonacci(int n=0); 

    protected: 
     int m_n0, m_n1, m_n; 
}; 

Fibonacci.cpp:

#include "Fibonacci.h" 

Fibonacci::Fibonacci(int n){ 
    m_n0 = 0; 
    m_n1 = 1; 
    m_n = n; 
} 

Этот код выдает следующее сообщение об ошибке в Visual Studio 2013:

Ошибка 2 Ошибка LNK1120: 1 неразрешенных внешних C: \ Dropbox \ TODO \ C++ \ экзамен \ Ex2 \ не работает \ Упражнение 2 \ fibo1 \ Fibo1 \ Debug \ Fibo1.exe Fibo1 Ошибка 1 ошибка LNK2019: неразрешенный внешний символ "public: __thiscall Fibonacci :: Fibonacci (int)" (? 0Fibonacci @@ QAE @ H @ Z), на который ссылается функция _main C: \ Dropbox \ TODO \ C++ \ экзамен \ Ex2 \ не работает \ Упражнение 2 \ fibo1 \ Fibo1 \ main.obj Fibo1

I сохраняется, но как только я заменить строку в main.cpp с

 Fibonacci Fib(); 

Т.е. я не передаю целое число конструктору, все работает (ну, он компилируется, ничего не делает, как ожидалось).

Благодарим за помощь! Я действительно все еще застрял.

+2

Являются ли оба файла 'cpp' частью одного проекта? – Angew

+0

Я успешно скомпилировал ваш код в CodeBlocks, но мне пришлось изменить void main на int main. Получается, что void main - VS. – otisonoza

+0

Из любопытства я пробовал его в VS 2013, и он успешно компилируется для меня. – otisonoza

ответ

1

Я наконец-то нашел свою ошибку. Оказывается, что в самом коде нет ничего плохого, но я как-то уничтожил проект VisualStudio. Я действительно не специалист по этим вещам, но вот то, что работает для меня:

  1. создать новый пустой проект в Visual Studio
  2. скопировать CPP файлы (все они также *.ч файлов) в новую папку проекта
  3. добавить их в этот новый проект щелкнув правой кнопкой мыши проект и с помощью «Добавить новый элемент»

Я знаю, что это простой способ сделать это, но я не могу видеть как я сломал старый проект (в конце концов, он должен быть достаточно прост)

Спасибо всем вам - спасибо особенно otisonoza и Angew, за то, что установили меня на правильном пути, что нет ничего плохого в коде (который работает на их конце), но с проектом Visual Studio.

0

Ваша main функция должна возвращать int

void main(void){ 

Должно быть

int main(){ 

EDIT: Благодаря otisonoza в комментариях для указания на то, что некоторые компиляторы принять это определение основной. Кроме этого, я не вижу причин для ошибок компилятора в вашей системе. Вы уверены, что вставили код точно так, как вы его написали?

Кроме того, что случилось со случайным тиком после вашего определения main?

}` 

Кроме того, вам не нужно иметь точку с запятой после каждой функции в файле .cpp:

Fibonacci::Fibonacci(int na){ 
    m_n0 = 0; 
    m_n1 = 1; 
    m_n = 2; 
}; 

int Fibonacci::getNext(int FnM1, int FnM2){ 
    return FnM1 + FnM2; 
}; 

может быть

Fibonacci::Fibonacci(int na){ 
    m_n0 = 0; 
    m_n1 = 1; 
    m_n = 2; 
} 

int Fibonacci::getNext(int FnM1, int FnM2){ 
    return FnM1 + FnM2; 
} 
+1

http://stackoverflow.com/questions/636829/difference-between-void-main-and-int-main Некоторые компиляторы принимают его, и компилятор Visual C++ делает это. – otisonoza

+0

@otisonoza: Спасибо, я этого не знал. – AndyG

+0

@Michael: Вот случайная мысль: вы не используете параметр 'int' в своем конструкторе. Попробуйте использовать его для чего-то или вообще удалите. Неиспользуемые параметры обычно вызывают предупреждения, но, возможно, у вас есть некоторые опции, чтобы вызвать их ошибки или сделать что-то еще? Я не знаю, я просто добираюсь сюда. – AndyG