Инициализация членов (чьи конструкторы принимают аргументы) в структуре в классе - PullRequest
0 голосов
/ 16 июня 2011

Я получаю ошибки от моего компилятора, когда я пытаюсь написать код с таким общим форматом:

в classname.hpp

#include "otherclass.hpp"
class classname {
public:
    typedef struct {
        otherclass membername(sometype);
    } structname;
    void functionname(structname& exampleData);
}

в main.cpp, я определяю переменную exampleData:

classname::structname exampleData;

в classname.cpp, у меня есть функция, которая использует exampleData и пытается инициализировать член, имя члена структуры:

void classname::functionname(structname& exampleData){
    sometype a;
    exampleData.membername(a);
}

Я получаю ошибку от моего компиляторазаявив:

Неопределенные символы: classname::structname::membername(sometype) "ссылка с classname::functionname(classname::structname&) в classname.o. ld: символ (ы) не найдены

Я думаю, что моя ошибкалежит в пределах строки

otherclass membername(sometype)

Я также думал, что это может быть:

otherclass membername(sometype& a)

Но я получил те же ошибки.

Мне интересно, законно ли эточтобы сделать, иметь член в структуре в классе, конструктор которого не (). В main.cpp, когда я объявляю exampleData, имя члена еще не было инициализировано. Это законно или я охота не в том месте?

1 Ответ

5 голосов
/ 16 июня 2011

Ошибка, которую вы получаете, очень похожа на ошибку компоновщика, вызванную тем, что функция classname::structname::membername нигде не определена. Из кода, который вы разместили, похоже, что вы просто объявили функцию, не предоставив нигде определения, то есть код будет компилироваться, но не ссылаться. Вы должны быть в состоянии это исправить, предоставив реализацию функции где-то в вашей программе. Это не имеет никакого отношения к тому, взят ли параметр по ссылке; в обоих случаях вам все еще нужно предоставить реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...