Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2014, 14:01   #1
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию не могу скомпилировать

error LNK2019: ссылка на неразрешенный внешний символ "public: static void * __cdecl loc:perator new(unsigned int)" (??2loc@@SAPAXI@Z) в функции _main
error LNK2019: ссылка на неразрешенный внешний символ "public: static void __cdecl loc:perator delete(void *)" (??3loc@@SAXPAX@Z) в функции __catch$_main$0
error LNK2019: ссылка на неразрешенный внешний символ "public: static void * __cdecl loc:perator new[](unsigned int)" (??_Uloc@@SAPAXI@Z) в функции __catch$_main$0
error LNK2019: ссылка на неразрешенный внешний символ "public: static void __cdecl loc:perator delete[](void *)" (??_Vloc@@SAXPAX@Z) в функции __catch$_main$2
fatal error LNK1120: неразрешенных внешних элементов: 4


Код:
#include <iostream>
#include <new>
#include <cstdlib>
using namespace std;

class loc{
	int longitude,latitude;
public:
	loc(){longitude = latitude = 0;}
	loc(int lg,int lt){
		longitude = lg;
		latitude = lt;
	}

	void show(){
		cout << longitude << " ";
		cout << latitude << "\n";
	}

	void* operator new(size_t size);
	void operator delete(void* p);
	void* operator new[](size_t size);
	void operator delete[](void* p);

};

void* operator new(size_t size){
	void* p;
	cout << "Operator new peregrugen" << endl;
	p = malloc(size);
	if(!p){
		bad_alloc ba;
		throw ba;
	}
	return p;
}

void operator delete(void* p){
	cout << "peregruzka delete" << endl;
	free(p);
}

void* operator new[](size_t size){
	void* p;
	cout << "Operanor new peregrugen" << endl;
	p = malloc(size);
	if(!p){
		bad_alloc ba;
		throw ba;
	}
	return p;
}

void operator delete[](void* p){
	cout << "peregruzka delete" << endl;
	free(p);
}


int main(){
	loc* p1;
	loc* p2;
	int i;

	try{
		p1 = new loc(10,20);
	}catch(bad_alloc xa){
		cout << "Error videleni9 pam9ty p1" << endl;
		return 1;
	}
	p1->show();
	delete p1;


	try{
		p2 = new loc[10];
	}catch(bad_alloc xa){
		cout << "Error videleni9 pam9ty p2" << endl;
		return 1;
	}
	for(i=0;i<10;i++)
		p2[i].show();
	delete[] p2;
	
	
	char ch = getchar();
	return 0;
}

Последний раз редактировалось zla9_kolu4ka; 20.03.2014 в 15:14.
zla9_kolu4ka вне форума Ответить с цитированием
Старый 20.03.2014, 14:21   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну так правильно, вы объявили метод класса, а реализовали просто функцию.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.03.2014, 15:06   #3
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

Цитата:
ну так правильно, вы объявили метод класса, а реализовали просто функцию.
спс
А тут
Код:
p2 = new loc[10];
тут же должен вызываться конструктор?
Код:
loc(){longitude = latitude = 0;};
Почему в отладчике не вызывается?

Последний раз редактировалось zla9_kolu4ka; 20.03.2014 в 15:15.
zla9_kolu4ka вне форума Ответить с цитированием
Старый 20.03.2014, 20:02   #4
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

Цитата:
Сообщение от zla9_kolu4ka Посмотреть сообщение
спс
А тут
Код:
p2 = new loc[10];
тут же должен вызываться конструктор?
Код:
loc(){longitude = latitude = 0;};
Почему в отладчике не вызывается?
Если бы вы не перегрузили operator new[], тогда был бы вызван конструктор по умолчанию 10 раз.
halcyon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу скомпилировать xaysnet Общие вопросы по Java, Java SE, Kotlin 3 20.01.2013 15:17
Не могу скомпилировать (a mod 2) = 0 kta87 Общие вопросы Delphi 7 31.05.2012 18:53
Не могу скомпилировать. graff195 Общие вопросы Delphi 1 11.04.2012 17:00
не могу скомпилировать программу newuserc Общие вопросы Delphi 8 02.04.2012 19:53
C и ассемблер, не могу скомпилировать Olen' Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 19.02.2009 19:57