2016-01-13 4 views
-1

У меня есть инструкции использовать указатель на указатель в виде массива указателей и это то, что у меня есть:ошибка «неопределенная ссылка» при использовании массива указателей

className **wordArray; 
wordArray = new className*[wordCount]; 
ifstream fileInput; 
fileInput.open(fileDir); 
while (fileInput >> wordInput) 
{ 
    wordArray[countNumber] = new className(wordInput.c_str()); 
    countNumber++; 
} 

class className 
{ 
public: 
    className(const char *word); 
    ~className(); 
}; 

className::className(const char *word) 
{ 
    char wordArray[strlen(word)]; 
    strcpy(wordArray, *word); 
} 

Моя проблема возникает при компиляции, или пытается. В нем говорится, что существует «неопределенная ссылка» на класс. Предполагается, что конструктор класса должен принять const char*, и я попробовал несколько других вещей безрезультатно.

+2

Это C. не вынимая тег. –

+3

[Что такое неопределенная ссылка и как ее исправить?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do- i-fix) –

+2

Пожалуйста, разместите [MCVE] (http://stackoverflow.com/help/mcve), чтобы другие могли более легко воспроизвести проблему, если/при необходимости. – ray

ответ

1

Неопределенная ссылка означает, что некоторая функция или переменная была объявлена, но не реализована. В этом случае вам необходимо обеспечить реализацию конструктора, например:

className::className(const char *word) 
{ 
    // do something here... 
} 

И то же самое для деструктора.

1

Вы получаете ошибку Undefined reference, потому что вам не хватает реализации конструктора и деструктора className. Оба могут быть пустыми, но должны быть либо встроенными, либо отдельными функциями.

Инлайн:

class className { 
public: 
    className(const char *word) {} 
    ~className() {} 
}; 

Отдельные функции:

class className { 
public: 
    className(const char *word); 
    ~className(); 
}; 

className::className(const char *word) {} 
className::~className() {} 

Для меня это минимальный рабочий пример компилирует:

#include <string> 

class className { 
public: 
    className(const char *word) {} 
    ~className() {} 
}; 

int main(int argc, char** argv) { 
    className **wordArray; 
    std::string wordInput = "test"; 
    int wordCount = 0; 

    wordArray = new className*[wordCount]; 
    wordArray[0] = new className(wordInput.c_str()); 
} 
+0

Я понял, что сделал о самой тупой ошибке, которую я когда-либо делал. Я забыл включить другой .cpp-файл в команду, чтобы скомпилировать его. Хотя, теперь, когда я это сделал, у меня есть ошибка, которая говорит «ожидаемый unqualified-id перед« const »и« expected ») до« const ». – Spartin503

+0

Проблема, похоже, не связана с этим вопросом. Пожалуйста, ищите ответы на вопросы, и если вы не нашли соответствия вашей проблеме, задайте новый вопрос вместе с [MCVE] (http://stackoverflow.com/help/mcve). –

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