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

error: LNK2019 - C++

Восстановить пароль Регистрация
 
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
26.05.2011, 19:02     error: LNK2019 #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
shape.h
 
#pragma once
#include "stdafx.h"
 
class Shape
{
...
};
 
std::istream& operator>>(std::istream&,Shape&);
std::ostream& operator<<(std::ostream&,const Shape&);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
shape.cpp
 
#include "Shape.h"
#include "stdafx.h"
 
const double Shape::PI = 3.1415927;
 
std::istream& operator>>(std::istream& in, Shape* rhs)
{
...
}
 
std::ostream& operator<<(std::ostream& out, /*const*/ Shape& rhs)
{
    rhs.print(out);
    return out;
}
Текст из ошибки в компиляторе: "...referenced in function _wmain".
Ошибка LNK2019 http://msdn.microsoft.com/en-us/libr...8VS.80%29.aspx
"...To resolve this error, provide a definition for symbol or remove the code that references it..."
Прошу помочь разобраться. Объявления присутствуют в заголовке shape.h (см. код выше), определение в shape.cpp(см. код выше). Где собака зарыта?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2011, 19:02     error: LNK2019
Посмотрите здесь:

C++ error LNK2019
C++ error LNK2019
C++ error LNK2019
C++ Ошибка error LNK2019:
C++ Error LNK2019
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
26.05.2011, 19:06     error: LNK2019 #2
Попробуй в shape.cpp оставить только
C++
1
#include "Shape.h"
без pragmа.
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
26.05.2011, 19:11  [ТС]     error: LNK2019 #3
Цитата Сообщение от Overmind024 Посмотреть сообщение
Попробуй в shape.cpp оставить только
C++
1
#include "Shape.h"
без pragmа.
Не помогло.
HighPredator
 Аватар для HighPredator
5351 / 1734 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
26.05.2011, 19:29     error: LNK2019 #4
Полный текст ошибки приведите.
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
26.05.2011, 19:32     error: LNK2019 #5
C++
1
2
std::istream& operator>>(std::istream&,Shape&);
std::ostream& operator<<(std::ostream&,const Shape&);
в объявлении у вас в операторе >> второй параметр -- ссылка.
В определении же у вас указатель, а это разные совсем вещи
C++
1
std::istream& operator>>(std::istream& in, Shape* rhs)
Прототипы не совпадают, получается , что тела для того оператора , что в Shape.h был описан, так и нет, вот и ошибка.
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
26.05.2011, 20:00  [ТС]     error: LNK2019 #6
1>4-12.obj : error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Shape const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABVShape@@@Z) referenced in function _wmain
1>4-12.obj : error LNK2019: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class Shape &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@AAVShape@@@Z) referenced in function _wmain
1>C:\Users\Администратор\Documents\Visual Studio 2010\Projects\Weiss\Ch4\4-12\Debug\4-12.exe : fatal error LNK1120: 2 unresolved externals

И ещё один момент, компилятор этого не сообщает, но в shape.cpp при использовании
C++
1
rhs = new Circle(...) //shape - базовый класс, rhs - указатель на базовый
есть всплывающее сообщение после наведения на new:
a value of type *Circle cannot be assigned to an entity of type *Shape

Добавлено через 25 минут
Разобрался. Но хочу уточнить некоторые моменты.
У меня определена структура
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct PtrToShape
{
public:
    Shape* ptr;
 
    bool operator<(const PtrToShape& rhs) const
    { return *ptr < *rhs.ptr; }
 
    bool operator>(const PtrToShape& rhs) const
    { return *ptr > *rhs.ptr; }
 
    const Shape& operator*() const
    { return *ptr; }
 
    /*Shape& operator*() //непринципиально
    { return *ptr; }*/   //
};
правильно ли понимаю:
main():
C++
1
std::cin >> array[i].ptr; //справа передаётся адрес (содержимое указателя)
для этот мне нужен следующий протоип:
C++
1
std::istream& operator>>(std::istream&,Shape*);
C++
1
2
std::cout << *array[i]; //передаётся ссылка(уверен, что не точный термин) на объект shape по адресу,
                           //на который указывает указатель
для этот мне нужен следующий протоип:
C++
1
std::ostream& operator<<(std::ostream&,const Shape&);
Yandex
Объявления
26.05.2011, 20:00     error: LNK2019
Ответ Создать тему
Опции темы

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