2012-05-08 1 views
1

Я до сих пор довольно новичок в NetBeans и пишу код для класса на C++. В настоящее время я нахожусь в моем третьем проекте, и я столкнулся с ошибкой, которую я не могу решить, пытаясь скомпилировать + запустить мой проект. Я проверил код в четыре раза, выполнив так, чтобы скопировать код из предыдущего проекта. Я попытался уйти, перезагрузить компьютер и снова запустить NetBeans. Я запустил CppCheck в своем коде и не обнаружил ошибок.NetBeans не распознает члены класса C++ при build + run

Сообщение об ошибке:

build/Debug/MinGW-Windows/main.o: In function `main': 
C:/Users/Martin/Documents/NetBeansProjects/Lab3/main.cpp:52: undefined reference to `Dictionary::Dictionary()' 
C:/Users/Martin/Documents/NetBeansProjects/Lab3/main.cpp:52: undefined reference to `Dictionary::~Dictionary()' 

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

Что я могу проверить, что может вызвать эту проблему? Какие-то неясные (или даже очевидные) настройки я могу проверить? Должен ли я просто начать новый проект и скопировать код?

Edit: Добавление главного():

#include <cstdlib> 
#include <iostream> 


#include "Dictionary.h" 

using namespace std; 

/* 
* argv[1] dictionary file 
* argv[2] boggle board file 
* argv[3] output file 
*/ 
int main(int argc, char** argv) { 
    if (argc > 3) { 
     Dictionary dict; 
     dict.loadDictFile(argv[1]); 

    } else { 
     cout << "Not enough arguments. Needed: ./lab3 [dictionary file] " 
       "[board file] [output file]" << endl; 
    } 
    return 0; 
} 

И Dictionary.h:

#ifndef DICTIONARY_H 
#define DICTIONARY_H 

#include <string> 
#include <set> 

using namespace std; 

class Dictionary { 
public: 
    Dictionary(); 
    Dictionary(const Dictionary& orig); 
    virtual ~Dictionary(); 

    virtual void loadDictFile(char * fileName); 
    virtual bool find(string word); 


private: 
    set<string> dict; 
    set<string> fullDictionary; // Contains all words, not just those 4+ char long. 

}; 

#endif /* DICTIONARY_H */ 

И Dictionary.cpp:

#include "Dictionary.h" 
#include <cstdlib> 
#include <iostream> 
#include <fstream> 

#include <string> 
#include <set> 

//using namespace std; 

Dictionary::Dictionary() { 
} 

Dictionary::Dictionary(const Dictionary& orig) { 
    dict = orig.dict; 
    fullDictionary = orig.fullDictionary; 
} 

Dictionary::~Dictionary() { 
} 

void Dictionary::loadDictFile(char* fileName) { 
    ifstream infile; 
    infile.open(fileName); 
    if (infile) { 
     while(!infile.eof()) { 
      string line; 
      getline(infile, line); 
      fullDictionary.insert(line); 
      if (line.size() > 3) { 
       dict.insert(line); 
      } 
     } 
    } else { 
     cout << "Dictionary File not loaded: " << fileName << endl; 
    } 
} 

bool Dictionary::find(string word){ 
    if (dict.find(word) != dict.end()) { 
     return true; 
    } else { 
     return false; 
    } 
} 
+1

Это ошибки компоновщика. Ничего общего с Netbeans. Не могли бы вы показать определения для своего класса и как вы включаете их в main.cpp? –

+0

Добавлено main() и Dictionary.h –

+0

У вас есть 'Dictionary.cpp'? Где определения словаря? –

ответ

1

Найдено мою проблему. Netbeans не считал класс Dictionary частью моего проекта, поэтому он не компилировал Dictionary.cpp. Я добавил его в окно Project, щелкнув правой кнопкой мыши папку Source Files и используя пункт меню Add existing item.... Теперь он отлично компилируется.

Кто-нибудь знает, почему класс не будет добавлен, если я использовал интерфейс Netbox New File и добавлен в проект конкретно?

+0

У меня была такая же проблема ... Мне пришлось сначала удалить файлы из проекта и добавить их снова. Это похоже на ошибку в NetBeans. Я добавил 5 файлов в свой проект: 3 были добавлены правильно, 2 не были ... – AbcAeffchen