powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / error LINK2001: unresolved external symbol
8 сообщений из 8, страница 1 из 1
error LINK2001: unresolved external symbol
    #33679647
Landanan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работаю над созданием базового класса, который в будущем будет расширяться (inheritance). Вот его весьма упрощенный вид:


// example.h

class example
{
public:
virtual bool occurence(int) const;
};


При компилировании выдает ошибку:
Project error LNK2001: unresolved external symbol "public: virtual bool __thiscall example::occurence(int)const " (?occurence@example@@UBE_NHHH@Z)

Обычно такую ошибку выдает когда имеется function prototype, но отсутствует definition (сорь что на инглише - на русском не знаю как их называют), но дело в том, что сам тип virtual говорит о том, что самого кода не должно быть в данном классе, т.к. код будет писаться уже в вытекающих классах, типа этого:

class test : public example

Компилятор: MS Visual Studio .NET 2003
...
Рейтинг: 0 / 0
error LINK2001: unresolved external symbol
    #33679666
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virtual не тип и говорит он не об этом. Учите матчасть.
Если нужно ЧИСТО виртуальную функцию:

Код: plaintext
1.
2.
3.
4.
class example
{
public:
virtual bool occurence(int) const =  [b]0 [/b];
};
...
Рейтинг: 0 / 0
error LINK2001: unresolved external symbol
    #33679674
Обычно такую ошибку выдает когда имеется function prototype, но отсутствует definition (сорь что на инглише - на русском не знаю как их называют), но дело в том, что сам тип virtual говорит о том, что самого кода не должно быть в данном классе, т.к. код будет писаться уже в вытекающих классах

для абстрактного класса функции должны быть pure virtual


// example.h

class example
{
public:
virtual bool occurence(int) const = 0
;
};
...
Рейтинг: 0 / 0
error LINK2001: unresolved external symbol
    #33679693
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажу вдобавок что классы, разработанные для наследования, должны иметь виртуальный деструктор.
...
Рейтинг: 0 / 0
error LINK2001: unresolved external symbol
    #33679701
Landanan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторvirtual не тип и говорит он не об этом. Учите матчасть
Сорь, на русском не знаю как они называются...

авторУчите матчасть
Чем, в общем-то, и занимаюсь :)

авторvirtual bool occurence(int) const = 0

Попробовал - выдает ту же ошибку :(
Если закомментю или просто удалю эту строчку - всё компилируется нормально...
...
Рейтинг: 0 / 0
error LINK2001: unresolved external symbol
    #33679724
Landanan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторСкажу вдобавок что классы, разработанные для наследования, должны иметь виртуальный деструктор

Вот это что-то новое! Спасибо за наколку, запомню! :)

С ошибкой разобрался. Фактически сделал то, что советовали первые 2 камрада:

virtual bool occurence(int) const { return false };

не знал что все равно нужно определение давать :(
...
Рейтинг: 0 / 0
error LINK2001: unresolved external symbol
    #33679939
не знал что все равно нужно определение давать :(

что-то вы не договариваете..
этот код компилируется и линкуется на ура (MSVS2003)
может вы пытались создать объект данного типа?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class example
{
public:
	virtual bool occurence(int) const;
};

class example1
{
public:
	virtual bool occurence(int) const =  0 ;
};

int main()
{
	return  0 ;
}

...
Рейтинг: 0 / 0
error LINK2001: unresolved external symbol
    #33680038
Landanan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё договариваю :)
Чтобы было проще, выкладываю полный код класса:

Код: plaintext
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
// Appointment.h

#ifndef APPOINTMENT_H
#define APPOINTMENT_H

#include "ccc_time.h"
#include "ddate.h"

#ifndef STRING_H
	#define STRING_H
	#include <string>
#endif

using std::string;
using std::ostream;
using std::istream;

class Appointment
{
protected:
	string description;	// Description of an appointment
   Time start;				// Start time
   Time end;				// End time

public:
   Appointment();
   // Default Constructor.
	// Sets description to an empty string, start and end time to the current system time.

   Appointment(string desc, Time s, Time e);
	// Parameterized constructor
	// Sets time by taking an object of that type as an argument
	
	Appointment(string desc, string s, string e);
	// Parameterized constructor
	// Sets time by taking two strings as an argument

	void changeStartTime(int h, int m, int s);
	// Changes the start time
	// Pre: takes 3 integers as hours, minutes, seconds
	// Post: sets time to the new one

	void changeStartTime(string newTime);
	// Changes the start time
	// Pre: takes a string in a "hh:mm:ss" format
	// Post: converts string to integers and changes the time values accordingly

	void changeEndTime(int h, int m, int s);
	// Changes the end time
	// Pre: takes 3 integers as hours, minutes, seconds
	// Post: sets time to the new one

	void changeEndTime(string newTime);
	// Changes the start time
	// Pre: takes a string in a "hh:mm:ss" format
	// Post: converts string to integers and changes the time values accordingly

	virtual bool occurs_on(int year, int month, int day) const;
	// Pre: takes date in a yyyy/mm/dd format
	// Post: returns true if an appointment occurs on that date

   friend ostream& operator << (ostream& out, Appointment& obj);
	// Outputs the information about an Appointment
	// Description   Start Time   End Time

   friend istream& operator >> (istream& in, Appointment& obj); 
	// Inputs the information about an appointment
	// Description <NEWLINE>
	// Start Time  <NEWLINE> 
	// End Time    <NEWLINE>
};

#endif

Вот.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
// main.cpp
#include "Appointment.h"

int main()
{
	system("pause");
	return  0 ;
}

Как есть :)

Еще вот одна странная вещь: в классе Appointment, пока вначале не укажу using std::string и т.д. - тоже не хочет компилироваться :/
Не знаю, может у меня компайлер коряво установлен...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / error LINK2001: unresolved external symbol
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]