Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> error LNK2001: unresolved external symbol, Помогите с ошибкой 
V
    Опции темы
Stive
Дата 6.1.2010, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.3.2006
Где: Киев, Украина

Репутация: нет
Всего: нет



Помогите плиз, только начинаю изучать C++ ООП.
Нужно разобраться с лабой.
При компиляции:

Код

//==============Файл lab9_2.h – інтерфейси класів=======================\\

class array //клас масив
{
public:
char name[10]; //ім’я масиву
array(); //конструктор
virtual void show(); //відображення атрибутів об’єкта
};
//////////////////////////////////////////////////////// клас вектор ///////////////////////////////////////////////////
class vector:public array
{ public:
int mas[5]; //компоненти вектора
int row; //кількість компонентів
vector(); //конструктор
vector(int number_element); //перевантажений конструктор
virtual void show(); //відображення атрибутів об’єкта
};
///////////////////////////////////////////////// клас матриця //////////////////////////////////////////////////////////////
class matrix:public vector
{ public:
int matr[5][5]; //елементи матриці
int column; //кількість стовпчиків, кількість рядків успадковується з класу вектор
matrix(); //конструктор
matrix(int number_column); //перевантажений конструктор
virtual void show(); //відображення атрибутів об’єкта
void mult(vector &v); //множення матриці на вектор
void add(matrix &other_matr); //додавання матриць
};



Код

//===============Файл lab9_2.срр - реалізація класів =====================\\

#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include "lab9_2.h"
int flag=0; //прапорець для визначення типу виведення атрибутів
array::array() //конструктор ініціалізації атрибутів класу array
{ cout<<"enter name of object"<<endl;
gets(name); }
//////////////////////////////// відображення атрибутів об’єкта //////////////////////////////////////////////////
void array::show()
{ cout<<name; }

//////////////// конструктор об’єкта vector, посилається на конструктор об’єкта array ////////////
vector::vector():array()
{ puts("enter size of column-vector");
cin>>row; //уведення кількості компонентів вектора
cout<<"enter "<<row<<" values of column-vector "<<endl;
for(int i=0;i<row;i++) cin>>mas[i]; //уведення значення компонентів
}
/////////конструктор об’єкта vector, посилається на конструктор об’єкта array //////////////////
vector::vector(int number_row):array()
{ row=number_row;
}
/////////////////////////////// метод відображення атрибутів об’єкта /////////////////////////////////////////
void vector::show()
{ cout<<"vector atributes: name=";
array::show();
cout<<" row="<<row<<endl;
cout<<" values of column-vector:"<<endl;
for(int i=0;i<row;i++) cout<<mas[i]<<endl;
}
///////////////////////////// метод додавання матриць /////////////////////////////////////////////////////////
void matrix::add(matrix &other_matr)
{ //визначення можливості додавання
if ((row==other_matr.row)&&(column==other_matr.column))
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
matr[i][j]+=other_matr.matr[i][j];
else { cout<<"adding is impossible"<<endl;
flag=1; } //ознака неможливості додавання
}
///////////////////////////////// метод множення матриці на вектор //////////////////////////////////////////////
void matrix::mult(vector &v){
vector result(column); //об’єкт результату множення
if(v.row==column) //умова можливості множення
{ for (int i=0;i<row;i++)
{ result.mas[i]=0;
for(int j=0;j<column;j++)
result.mas[i]+=matr[i][j]*v.mas[j];
}
}
else cout<<"multiplication is impossible"<<endl;
result.show(); //відображення результатів множення
}

///////////////////////////////////// конструктор матриці ////////////////////////////////////////////////////////////
matrix::matrix(int number_row):vector(number_row)
{ char answer; //символ-відповідь на питання про необхідність уведення даних
cout<<"do you want to enter row ?y/n:";
cin>>answer;
if (answer=='n') //якщо кількість рядків не вводиться, то вона успадковується
{
cout<<"row is defined by vector"<<endl;
row= number_row;
}
else //потрібне введення нового значення кількості рядків
{ cout<<"enter row of matrix: ";
cin>>row;
}
cout<<"enter column of matrix"<<endl;
cin>>column; //уведення кількості стовпчиків
cout<<"enter "<<row<<"*"<<column<<" values of object's elements "<<endl;
for(int i=0;i<row;i++) //уведення елементів матриці
for(int j=0;j<column;j++)
cin>>matr[i][j];
}
////////////////////////////////// тестова програма ////////////////////////////////////////////////////////////////
void main()
{ puts("inheritance -lab9_2");
vector vec; vec.show(); //конструювання вектора та відображення його атрибутів
int size_row=vec.row; //формування аргументу для конструктора об’єкту матриці
cout<<"matrix1: ";
matrix mat1(size_row); //конструювання матриці
mat1.show(); //відображення матриці
cout<<"matrix2: ";
matrix mat2(size_row);
mat2.show(); //конструювання матриці та її відображення
mat1.add(mat2); //додавання матриць
if(flag==0)
{ cout<<"result of matrix adding"<<endl;
mat1.show();
}
cout<<"vector: result of multiplication matrix by vector"<<endl;
mat1.mult(vec); getchar(); //множення матриці на вектор, затримка зображення
}

Выскакивает ошибка:

lab9_2.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall matrix::show(void)" (?show@matrix@@UAEXXZ)
Debug/lab9_2.exe : fatal error LNK1120: 1 unresolved externals

В чем проблема?
PM MAIL WWW ICQ   Вверх
InvalidProperty
Дата 6.1.2010, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: 2
Всего: 9



каждый метод должен иметь тело. Если тело не описано в файле cpp, то нужно в заголовке для метода описать хотябы пустое тело, т.е

Код

class matrix:public vector
{ public:
int matr[5][5]; //елементи матриці
int column; //кількість стовпчиків, кількість рядків успадковується з класу вектор
matrix(); //конструктор
matrix(int number_column); //перевантажений конструктор
virtual void show() { } //відображення атрибутів об’єкта
void mult(vector &v); //множення матриці на вектор
void add(matrix &other_matr); //додавання матриць
};



--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
mes
Дата 6.1.2010, 19:28 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(InvalidProperty @  6.1.2010,  17:38 Найти цитируемый пост)
каждый метод должен иметь тело.

поправка: каждый используемый  явно или неявно (виртуальный, при условии что он не чисто виртуальный)  метод должен иметь тело.






Это сообщение отредактировал(а) mes - 6.1.2010, 19:33


--------------------
PM MAIL WWW   Вверх
bsa
Дата 10.1.2010, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
Stive, если ответ на вопрос получен, то пометь тему решенной

PM   Вверх
Stive
Дата 18.1.2010, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.3.2006
Где: Киев, Украина

Репутация: нет
Всего: нет



Цитата

каждый метод должен иметь тело. Если тело не описано в файле cpp, то нужно в заголовке для метода описать хотябы пустое тело
Сорри, так и не понял что куда нужно вставлять, слишком мало знаю ООП.
Объясните попроще плиз, или подскажите где почитать.
PM MAIL WWW ICQ   Вверх
bsa
Дата 18.1.2010, 13:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



В *.h файле:
Код
class X
{
    int method1() {} //встраиваемый метод с (пустым) телом
    int method2();     //объявление метода, определение (тело/реализация) может быть в *.cpp файле
                //(а может и не быть вообще, если не используется, но при попытки использовать будет указанная выше ошибка)
    inline method3(); //объявление встраиваемого метода, тело должно быть в этом же файле (*.h)
};

int X::method3() //определение метода
{
     //тело
}
В *.cpp файле:
Код

#include "x.h"

int X::method2()
{
    //тело
}


Это сообщение отредактировал(а) bsa - 18.1.2010, 13:52
PM   Вверх
Stive
Дата 18.1.2010, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.3.2006
Где: Киев, Украина

Репутация: нет
Всего: нет



bsa, спасибо огромное, теперь разобрался!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0745 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.