Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 66

LNK2019, LNK2005 и другое касательно include

13.05.2018, 23:37. Показов 1595. Ответов 11

Студворк — интернет-сервис помощи студентам
Читаю Стенли Липмана, по ходу возник один вопрос. Есть заголовочный файл класса Sales_data, он включен в cpp основной функции и cpp функций класса соответственно. В заголовочном файле используется std::string, но инклуд есть только в cpp класса и основном. Пытаюсь сделать также и для класса Screen, но он не дает использовать string в заголовочном файле без инклуда библиотеки в заголовочный файл, хотя с другим классом так работает.
Второй вопрос. Также проведу аналогии. Есть класс Sales_data, его заголовочный файл включается в файл основной функции, но его cpp не включается. Такая реализация дает мне возможность полноценно использовать все методы данного класса. Потом пытаюсь точно также реализовать класс Screen(да в курсе что повторяюсь, но решил эти вопросы разделить). Если я не включаю cpp файл этого класса, то получаю ошибку линковки вероятно(или нет?).
Code
1
Ошибка    LNK2019 ссылка на неразрешенный внешний символ "public: char __thiscall Screen::get(unsigned int,unsigned int)const " (?get@Screen@@QBEDII@Z) в функции _main классы
Если же включаю cpp файл этого класса, то получаю уже другую ошибку и с другим методом этого же класса.
Code
1
Ошибка    LNK2005 "public: void __thiscall Screen::some_member(void)const " (?some_member@Screen@@QBEXXZ) уже определен в Screen.obj
Надеюсь всё понятно, хотя очень сумбурно. Спасибо за помощь.
IDE MSVS17. Код https://github.com/Jihadist/-
Т.е. сам вопрос собственно в том почему с один классом всё работает а с другим нет, хотя реализую всё вроде(!) также.
P.s. если убрать включение файла исходных кодов класса Screen из основного файла, а также исключить использовать метода Screen::get который имеет два параметра, то ошибки исчезают.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2018, 23:37
Ответы с готовыми решениями:

Qt Creator показывает ошибки LNK2005, LNK2019, LNK1169
Qt показывает ошибки при компиляции на обычный код с одного сайта уроков: #include <QApplication> #include <QTextEdit> ...

Работа с файлами в C# с исп. библиотек #include <stdio.h> #include <stdlib.h> #include <math.h> #include <io.h>
В типизированном файле записаны названия городов и их численность. Увеличить численность каждого города на 5% (Количество жителей всегда...

#include<iostream>// подключение библиотек #include <conio.h> #include <climits>
помогите для этой программы сделать блок-схему. Пожалуйста #include&lt;iostream&gt;// подключение библиотек #include &lt;conio.h&gt; ...

11
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
13.05.2018, 23:51
MoonRaiser, у вас есть stdafx.h зачем тогда столько подключений в мейне?
препроцессору конечно пофиг что сожрать, но .cpp файл наверное не стоит подключать

Добавлено через 1 минуту
И ещё у вас дефолтный конструктор не реализован Screen() = default;
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
14.05.2018, 05:55
Azazel-San, ну он как бэ = default.
0
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 66
14.05.2018, 12:36  [ТС]
Azazel-San, т.е. в нем все заголовки и библиотеки подключать?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
14.05.2018, 12:54
Цитата Сообщение от Croessmah Посмотреть сообщение
Azazel-San, ну он как бэ = default.
верно, но врядли это то что нужно ТС, он создает объект своего класса так Screen myscreen через дефолтный к-тор, а затем пытается получить пустые данные myscreen.get(), тк это он доверил компилятору, значит этот к-тор, либо лишний, либо его забыл ТС верно реализовать для себя.

Добавлено через 3 минуты
Цитата Сообщение от MoonRaiser Посмотреть сообщение
Azazel-San, т.е. в нем все заголовки и библиотеки подключать?
не все, только системные, ещё возможно стоит перебилдить проект, если не все файлы вы писали сами
так же просмотрите все пути, везде ли подключены все заголовочные файлы и верно ли вы вызываете методы.
Может стоит в .cpp файле указать что такое pos => Screen::pos
0
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 66
14.05.2018, 17:30  [ТС]
Azazel-San, конструктор же реализован https://github.com/Jihadist/-/blob/master/Screen.h здесь или что?


Цитата Сообщение от Azazel-San Посмотреть сообщение
Может стоит в .cpp файле указать что такое
C++
1
pos
=>
C++
1
Screen::pos
Посмотрел, он понимает что pos это
C++
1
 Screen::pos
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
14.05.2018, 18:03
Цитата Сообщение от MoonRaiser Посмотреть сообщение
конструктор же реализован
явно реализован только 1 из них
Цитата Сообщение от MoonRaiser Посмотреть сообщение
Посмотрел, он понимает что pos это
Ну, в общем ваша ошибка, довольно распространена и способов её решения (как и возникновения) очень много, например, что какой-то метод объявлен, но не определен.
Иммитирующий пример:
C++
1
2
3
4
5
void foo(int a);
int main()
{  
    foo(42); // имеем ошибку линковщика
}
Ещё в вашем случае может быть что какой-то файл с кодом не был скомпилирован

Добавлено через 10 минут
Ещё у вас название метода some_member() совсем не отвечает тому что он делает, почему он константный?
Для того что бы приклеить модификатор mutable? Иначе не понимаю зачем он?
0
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 66
14.05.2018, 18:28  [ТС]
Цитата Сообщение от Azazel-San Посмотреть сообщение
Ещё у вас название метода some_member() совсем не отвечает тому что он делает, почему он константный?
Для того что бы приклеить модификатор mutable? Иначе не понимаю зачем он?
да, так и есть. Такой пример в учебнике
0
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 66
15.05.2018, 22:54  [ТС]
Так все-таки почему возникает
Code
1
Ошибка    LNK2005 "public: void __thiscall Screen::some_member(void)const " (?some_member@Screen@@QBEXXZ) уже определен в Screen.obj
? Как она может быть дважды определена если один?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
16.05.2018, 17:41
MoonRaiser, всегда старайтесь ваши классы помещать в namespace (не анонимный).
Эта ошибка может возникнуть когда у вас, в вашем проекте есть два определения одной и той же функции.
Впрочем namespace это и должен исправить
1
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 66
16.05.2018, 19:41  [ТС]
Azazel-San, до namespace я ещё не дошел, спасибо всё равно. Как исправить тут то?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
16.05.2018, 22:19
Лучший ответ Сообщение было отмечено MoonRaiser как решение

Решение

MoonRaiser, убрать #include "Screen.cpp" я же вам написал..
и реалтзовать нормально конструктор, либо не использовать дефолтный, убрать inline там где он не inline
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
28
// классы.cpp
...
#include "Screen.h"
...
int main()
{
    Screen myscreen(0, 10, 'A');
    char ch = myscreen.get();
    ...
}
 
// Screen.h
class Screen
{
public:
    ...
    char get(pos ht, pos wd) const;
    ...
};
 
// Screen.cpp
...
char Screen::get(pos r, pos c) const
{
    pos row = r*width;
    return contents[row + c];
}
...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.05.2018, 22:19
Помогаю со студенческими работами здесь

Чем отличается #include <cstring>, #include <string> и #include <string.h>?
Доброго времени суток :) Пишу свой класс и мне для нужны функции для работы со строками. Когда подключаю #include &lt;string&gt; все...

Warning: include(1) [function.include]: failed to open stream: No such file or directory in
Выдает вот такую ошибку Warning: include(1) : failed to open stream: No such file or directory in...

Warning: include(templates.php) [function.include]: failed to open stream: No such file or directory
Как исправить ошибку, этот текст выдает на главной странице

В чем суть директив #include <Windows.h> #include <stdlib.h>
/*хочу сделать простую графическую программу ранее работал с turbo 3.0 я так понимаю &lt;graphics.h&gt; это что-то вроде &lt;Windows.h&gt;...

Warning: include(Z:/home/localhost/www/layout/header.php) [function.include]: failed to open stream: No such f
Столкнулся с такой проблемой не инклудится файл include $g_site_root.'/layout/header.php';?&gt;,пишет нет такого файла или папки,но все есть и...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru