Ошибка Apple Mach-O-Linker: переменная, на которую ссылается (строка), не найдена в архитектуре x86-64

avatar
KirbyB
7 апреля 2018 в 23:18
66
1
0

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

Я получаю сообщение об ошибке:

Неопределенные символы для архитектуры x86_64:

"Product::Product(Product const&)", ссылка из:

станд.::__1::список ::push_back(Product const&) in Week-2.o

ld: не найдены символы для архитектуры x86_64

clang: ошибка: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v, чтобы увидеть вызов)

Основная функция:

Product temp;
list <Product> allProducts;

if (!temp.loadInitalData())
{
    cout << "There is no Product data available. Try a different option: ";
    cin >> choice;
    repeat = true;
}
else {
     while (temp.loadInitalData())
     {
         allProducts.push_back(temp);   //This is where I'm getting the error
     }
     temp.viewMenu();
     repeat = false;
}

Функция loadInitalData() продукта:

bool Product::loadInitalData()
{
    bool moreData = true;
    fstream prodDatabase;
    prodDatabase.open("ProductDatabase.csv", ios::out|ios::in|ios::binary);
    if (!prodDatabase)
    {
        cout << "File could not be successfully opened\n";
        moreData = false;
    }
    else
    {
        moreData = loadInitialItemData(prodDatabase);
    }
    return moreData;
}

Я связал "Product.h" в моем файле main.cpp, а также . Есть предложения?

Источник

Ответы (1)

avatar
Paul Sanders
8 апреля 2018 в 05:08
1

У вас отсутствует конструктор копирования для класса Product. Существуют правила, когда компилятор предоставляет его, как указано здесь:

.

http://en.cppreference.com/w/cpp/language/copy_constructor

но вам все равно может понадобиться написать его, если копирование объекта Product является нетривиальной операцией.

Рассмотрите также возможность сделать ваш список списком Product * (т. е. списком указателей на Product). Это позволяет избежать копирования и вполне может быть тем, что вам действительно нужно.