Форум программистов, компьютерный форум CyberForum.ru

Ошибка LNK2019 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.98
|wanderer|
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 6
03.05.2012, 20:07     Ошибка LNK2019 #1
Здравствуйте, уважаемые программисты!
Обращаюсь к Вам потому, что в моей первой программе с классами вылетает ошибка линковки, а что с ней делать - я не знаю. Помогите кто чем может (:
Код
#include "stdafx.h"
#include "MyClass.h"
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <time.h>
using namespace std;

class Matrix{
public:
int Matrix_(int newSizeX, int newSizeY);
int SetSize(int newSizeX, int newSizeY);
int ViewMatrix();
int ViewMatrix(int newSizeX, int newSizeY);
int sizeX, sizeY;
int i, j, n, m;
	double matrix[4][4];

Matrix ()
	{
i=0; n=0; m=0;
	}

	~Matrix();
};

void main()
{ 
Matrix a;
a.Matrix_(4,4);
a.SetSize(4,4);
a.ViewMatrix();
a.ViewMatrix(4,4);
}
int Matrix::Matrix_(int newSizeX, int newSizeY){
time_t t;
sizeX=newSizeX;
sizeY=newSizeY;
cout <<"rows: " << endl;
cin >> n;
cout <<"columns: " << endl;
cin >> m;
double **matrix=new double *[n];
for (int i=0;i<n;i++)
{
  matrix[i] = new double [m];
}
srand ((unsigned) time(&t));
for (int i=0;i<n;i++)
	for (int j=0;j<m;j++)
{
	matrix[i][j]= (double)(rand()%60-30);
	
}
return 0;
}
int Matrix::SetSize(int newSizeX, int newSizeY){
int n, m=0;
cout <<"rows: " << endl;
cin >> n;
cout <<"columns: " << endl;
cin >> m;
double **matrix=new double *[n];
	for (int i=0;i<n;i++)
	{
	  matrix[i] = new double [m];
	}  

return 0;
}
int Matrix::ViewMatrix(){
for (int i=0; i<sizeX; i++)
{
	for (int j=0; j<sizeY; j++)
	{
		cout <<(L" " , matrix[i,j])<< endl;
		}
	cout <<(L" ")<< endl;
}
return 0;
}
int Matrix::ViewMatrix(int newSizeX, int newSizeY){
if ((newSizeX>sizeX)||(newSizeY>sizeY)){
ViewMatrix();}
else {
	for (int i=0; i<newSizeX; i++)
	{
	for (int j=0; j<newSizeY; j++)
	{
	cout<<(L" " , matrix[i,j])<< endl;
	{
	cout<<(L" ")<< endl;}
	}
	}
}
return 0;
}
Текст ошибки:
error LNK2019: unresolved external symbol "public: __thiscall Matrix::~Matrix(void)" (??1Matrix@@QAE@XZ) referenced in function _main
C:\Users\пк\Documents\Visual Studio 2008\Projects\hhh\Debug\hh.exe : fatal error LNK1120: 1 unresolved externals
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2012, 20:07     Ошибка LNK2019
Посмотрите здесь:

C++ Ошибка LNK2019
Ошибка LNK2019 C++
Ошибка LNK2019 C++
Ошибка LNK2019 C++
Ошибка LNK2019 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stass98
2 / 2 / 0
Регистрация: 05.03.2011
Сообщений: 34
04.05.2012, 00:08     Ошибка LNK2019 #2
Тут все в перемешку, создай отдельно(в отдельном файле) заголовок, отдельно реализацию и отдельно функцию main()
|wanderer|
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 6
04.05.2012, 00:14  [ТС]     Ошибка LNK2019 #3
Ну это я просто скопипастил сюда все вперемешку. А на деле у меня хедер с описанием класса отдельно и реализация отдельно.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
04.05.2012, 00:16     Ошибка LNK2019 #4
Ну так деструктор в классе объявлен, а где его реализация?
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,605
Записей в блоге: 17
04.05.2012, 00:24     Ошибка LNK2019 #5
Тут ерунда какая-то, в классе есть объявлена статически выделенная переменная
C++
1
 double matrix[4][4]; //  строка 19
И тут же фигурирует указатель на дин.массив
C++
1
2
3
4
5
double **matrix=new double *[n];// строка 65
    for (int i=0;i<n;i++)
    {
      matrix[i] = new double [m];
    }
|wanderer|
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 6
04.05.2012, 20:45  [ТС]     Ошибка LNK2019 #6
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну так деструктор в классе объявлен, а где его реализация?
Да, действительно, спасибо. С появлением реализации - ошибка ушла.





Цитата Сообщение от Avazart Посмотреть сообщение
Тут ерунда какая-то, в классе есть объявлена статически выделенная переменная
C++
1
 double matrix[4][4]; //  строка 19
И тут же фигурирует указатель на дин.массив
C++
1
2
3
4
5
double **matrix=new double *[n];// строка 65
    for (int i=0;i<n;i++)
    {
      matrix[i] = new double [m];
    }

Виноват. А как правильно?
Что-то вроде:

C++
1
2
3
4
5
6
7
8
class Matrix{
double**matrix;
public:
Matrix(){
matrix=new double*[n];
for (int i=0; i<n; i++) 
matrix[i] = new double[m];
};

Или нет?
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,605
Записей в блоге: 17
04.05.2012, 21:00     Ошибка LNK2019 #7
Ну да и соответственно деструктор с удалением прописать, если надо пересоздать массив в методе тоже не забывать удалить старый массив
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2012, 18:28     Ошибка LNK2019
Еще ссылки по теме:

C++ Ошибка LNK2019
C++ Ошибка LNK2019
Ошибка 2 error LNK2019, не пойму в чем ошибка C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
|wanderer|
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 6
05.05.2012, 18:28  [ТС]     Ошибка LNK2019 #8
Понял, спасибо.

Добавлено через 20 часов 49 минут
Теперь не получается с ошибкой времени выполнения программы.
Был дописан еще один метод:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int Matrix::Select(){
cout<<"Menu:"<<endl;
cout<<"1. Create matrix"<<endl;
cout<<"2. Set size"<<endl;
cout<<"3. View matrix"<<endl;
cout<<"4. View submatrix"<<endl;
cin>>key;
if (key==1){
p1=&Matrix::Matrix_;} else
if (key==2){
p2=&Matrix::SetSize;} else
if (key==3){
p3=&Matrix::ViewMatrix;} else
if (key==4){
p4=&Matrix::ViewMatrix;} 
else cout<<"this operator isn't correct"<<endl;
 
return 0;}
Указатели описаны и проинициализированы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Matrix{
public:
int Select();
int Matrix_(int newSizeX, int newSizeY);
int SetSize(int newSizeX, int newSizeY);
int ViewMatrix();
int ViewMatrix(int newSizeX, int newSizeY);
int sizeX, sizeY;
int i, j, n, m;
char key; 
double**matrix;
int (Matrix::*p1)(int newSizeX, int newSizeY);
int (Matrix::*p2)(int newSizeX, int newSizeY);
int (Matrix::*p3)();
int (Matrix::*p4)(int newSizeX, int newSizeY);
 
Matrix ()
{
i=0; n=0; m=0; key=0; j=0;
matrix=new double*[n];
for (int i=0;i<n;i++)
matrix[i]=new double[m];
int (Matrix::*p1)(int newSizeX, int newSizeY)=&Matrix::Matrix_;
int (Matrix::*p2)(int newSizeX, int newSizeY)=&Matrix::SetSize;
int (Matrix::*p3)()=&Matrix::ViewMatrix;
int (Matrix::*p4)(int newSizeX, int newSizeY)=&Matrix::ViewMatrix;
}
При выборе соответствующего пункта меню, должен вызываться один из четырех методов, однако, вместо этого, всё вызывается одной кучей:
this operator isn't correct
rows:
columns:
rows:
columns:

Не могу исправить.
Подскажите, что не так?
Yandex
Объявления
05.05.2012, 18:28     Ошибка LNK2019
Ответ Создать тему
Опции темы

Текущее время: 13:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru