powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / include context.h
38 сообщений из 38, показаны все 2 страниц
include context.h
    #39646398
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните пожалуйста

Создаю некий context.h

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
   #ifndef CONTEXT
   #define CONTEXT
   
    class context {
         public:
                 void run();
    } 

    void context::run() {

     }

   #endif CONTEXT



собираем получаем:

Undefined symbols for architecture x86_64:context::run referenced from:

В то же время если внести
void context::run() {

}

в cpp-шку - то все хорошо.

Ведь вначале h-ника стоит #ifndef
вроде #include должен имплементацию подключить ровно 1 раз

Спасибо.
...
Рейтинг: 0 / 0
include context.h
    #39646430
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
   #ifndef CONTEXT
   #define CONTEXT
   
    class context {
         public:
                 void run(){;}
    } 
   #endif CONTEXT




Вот так надо.
...
Рейтинг: 0 / 0
include context.h
    #39646432
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen,

Точнее вот так
#ifndef CONTEXT
#define CONTEXT

class context {
public:
void run(){;}
} ; // забыл точку с запятой.
#endif CONTEXT
...
Рейтинг: 0 / 0
include context.h
    #39646495
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это
Код: plaintext
1.
2.
3.
4.
5.
6.
   #ifndef CONTEXT
   #define CONTEXT
   
...

   #endif CONTEXT


можно заменить на
Код: plaintext
1.
#pragma once



По теме

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#pragma once
    class context {
         public:
                 void run() {
                   ...
                 }
    };
...
Рейтинг: 0 / 0
include context.h
    #39646613
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за объяснение

Поясните плиз - почему мой вариант не работает

Хочу понять как работает сборщик
...
Рейтинг: 0 / 0
include context.h
    #39646627
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen
собираем получаем:

Undefined symbols for architecture x86_64:context::run referenced from:



Ты гонишь, другая ошибка должна быть.

Проблема в том, что ты определяешь одну и ту же функцию много раз, но не объявляешь её inline ни явно, ни неявно.
...
Рейтинг: 0 / 0
include context.h
    #39646628
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Ты опять торопишься.
...
Рейтинг: 0 / 0
include context.h
    #39646629
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenХочу понять как работает сборщик

Вряд ли ты поймёшь по этому примеру, тут скорее С++-заморочки, чем работа сборщика.

Грубо говоря, определение функции в нескольких объектниках/библиотеках запрещено по классике.
А вот в С++ есть послабление -- разрешены функции inline.
...
Рейтинг: 0 / 0
include context.h
    #39646630
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadMasterZiv,

Ты опять торопишься.

В смысле?
...
Рейтинг: 0 / 0
include context.h
    #39646631
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, мне кажется. что у ТС точка с запятой пропущена 21419037

Но я редко на С пишу, т.ч. как компилятор воспринял код Т.С. - не знаю
...
Рейтинг: 0 / 0
include context.h
    #39646632
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Брррр

У меня объявление в 1 месте

Имплементация тоже в 1 месте

Просто оба они в 1 файле

Все работает если я имплементацию перекладываю в cpp - файл
...
Рейтинг: 0 / 0
include context.h
    #39646633
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenБрррр

У меня объявление в 1 месте

Имплементация тоже в 1 месте

Просто оба они в 1 файле

Все работает если я имплементацию перекладываю в cpp - файл

Нет, ты неправ. Подумай почему.
...
Рейтинг: 0 / 0
include context.h
    #39646634
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТы гонишь, другая ошибка должна быть.


Я вчера кодил и получил такую ошибку

Имя класса только другое было

Сюда выложил измененное имя класса и метода

Принцип остался тот же
...
Рейтинг: 0 / 0
include context.h
    #39646636
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen,

Давай начнём с уточнения сообщения об ошибке.
авторUndefined symbols for architecture x86_64:context::run referenced from:
...
Рейтинг: 0 / 0
include context.h
    #39646637
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНет, ты неправ. Подумай почему.

неправ в чем ?

Где 2-я декларация ? Где 2-я имплементация ?

Файл тоже 1
...
Рейтинг: 0 / 0
include context.h
    #39646638
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivsemen.s.semen,

Давай начнём с уточнения сообщения об ошибке.
авторUndefined symbols for architecture x86_64:context::run referenced from:

В оригинальной ошибке было

Undefined symbols for architecture x86_64

Дальше кракозябры внутри которых читались имена классов и методов
...
Рейтинг: 0 / 0
include context.h
    #39646641
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivAmKadMasterZiv,

Ты опять торопишься.

В смысле?Про пропущенную точку с запятой уже сказали. Поэтому с ней нижеприведенный вариант компилится. А то, что ты сказал про многократное определение ф-ии - просто поторопился.
context.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
   #ifndef CONTEXT
   #define CONTEXT
   
    class context {
         public:
                 void run();
    };

    void context::run() {

     }

   #endif CONTEXT

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

int main() 
{
    context ctx;
    ctx.run();
}
...
Рейтинг: 0 / 0
include context.h
    #39646645
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen,

Проблема у тебя должна быть в том, что ты включаешь context.h в НЕСКОЛЬКО исходных файлов.
Тогда ошибка должна быть что-то типа

Код: plaintext
multiple definition of symbol void context::run

А не как у тебя где этот символ не определён вообще ни одного раза.

Другой вариант может быть, если ты бы не включил этот context.h ни в один исходный файл.
Тогда была бы такая ошибка, как ты привёл, но тогда и класс не был бы объявлен, использовать ты его не мог бы.

В любом случае, если проблему не решил, выкладывай код на https://hastebin.com/ или аналоги.
...
Рейтинг: 0 / 0
include context.h
    #39646646
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПроблема у тебя должна быть в том, что ты включаешь context.h в НЕСКОЛЬКО исходных файлов.


Так ведь

#ifndef CONTEXT
#define CONTEXT


используется

Реально будет 1 инклуд
...
Рейтинг: 0 / 0
include context.h
    #39646648
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadПро пропущенную точку с запятой уже сказали. Поэтому с ней нижеприведенный вариант компилится. А то, что ты сказал про многократное определение ф-ии - просто поторопился.

Очевидно, что точка с запятой у него уже там была, иначе бы он не дошёл до фазы сборки, компиляция бы дала ошибку.
...
Рейтинг: 0 / 0
include context.h
    #39646650
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА не как у тебя где этот символ не определён вообще ни одного раза.


Все у меня определено

И все работает даже если context.h включен во многие исходники а имплементация лежит в отдельной cpp-шке
...
Рейтинг: 0 / 0
include context.h
    #39646652
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenMasterZivПроблема у тебя должна быть в том, что ты включаешь context.h в НЕСКОЛЬКО исходных файлов.


Так ведь

#ifndef CONTEXT
#define CONTEXT


используется

Реально будет 1 инклуд

Будет 1 инклуд, если ты включишь этот заголовок несколько раз в одном и том же исходном модуле .
Я говорю о включении его в РАЗНЫХ модулях.
...
Рейтинг: 0 / 0
include context.h
    #39646653
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivsemen.s.semenпропущено...


Так ведь

#ifndef CONTEXT
#define CONTEXT


используется

Реально будет 1 инклуд

Будет 1 инклуд, если ты включишь этот заголовок несколько раз в одном и том же исходном модуле .
Я говорю о включении его в РАЗНЫХ модулях.

Все работает даже если context.h включен во многие исходники а имплементация лежит в отдельной cpp-шке
...
Рейтинг: 0 / 0
include context.h
    #39646655
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenMasterZivА не как у тебя где этот символ не определён вообще ни одного раза.


Все у меня определено

И все работает даже если context.h включен во многие исходники а имплементация лежит в отдельной cpp-шке

Тогда давай код.
Домыслы твои выслушивать не интересно.
Ты говоришь одно, а на самом деле у тебя другое.
...
Рейтинг: 0 / 0
include context.h
    #39646656
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv....
Очевидно, что точка с запятой у него уже там была, иначе бы он не дошёл до фазы сборки, компиляция бы дала ошибку.

кому очевидно, а кому и нет
ну и ни про среду, ни про параметры сборки ничего не сказано

может автор по отдельности компилятор и линковшик из командной строки или FAR запускает ))) Т.ч. наличие ошибки на фазе компиляции, не значит, что он не смог бы дойти до фазы сборки ))) и собирать банально какие нибудь старые файлы )))
...
Рейтинг: 0 / 0
include context.h
    #39646657
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenMasterZivпропущено...


Будет 1 инклуд, если ты включишь этот заголовок несколько раз в одном и том же исходном модуле .
Я говорю о включении его в РАЗНЫХ модулях.

Все работает даже если context.h включен во многие исходники а имплементация лежит в отдельной cpp-шке

Ну так и дожно быть, это штатный режим сборки всего кода.
...
Рейтинг: 0 / 0
include context.h
    #39646659
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivРАЗНЫХ модулях.

А что здесь понимается под термином модуль ?
...
Рейтинг: 0 / 0
include context.h
    #39646660
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenMasterZivРАЗНЫХ модулях.

А что здесь понимается под термином модуль ?

Исходный файл .cpp (.cxx)
...
Рейтинг: 0 / 0
include context.h
    #39646662
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivsemen.s.semenпропущено...


А что здесь понимается под термином модуль ?

Исходный файл .cpp (.cxx)

НУ вообщем понятно

#ifdef действует только в рамках одной cpp-шки

Если их много то получаем по 1-й декларации и имплементации на модуль

В итоге при линковке оно не понимает на какую имплементацию линковать и падает

Спасибо!
...
Рейтинг: 0 / 0
include context.h
    #39646673
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenMasterZivпропущено...


Исходный файл .cpp (.cxx)

НУ вообщем понятно

#ifdef действует только в рамках одной cpp-шки

Если их много то получаем по 1-й декларации и имплементации на модуль

В итоге при линковке оно не понимает на какую имплементацию линковать и падает

Спасибо!

Но только ошибка при этом другая.
...
Рейтинг: 0 / 0
include context.h
    #39646675
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivsemen.s.semenпропущено...


НУ вообщем понятно

#ifdef действует только в рамках одной cpp-шки

Если их много то получаем по 1-й декларации и имплементации на модуль

В итоге при линковке оно не понимает на какую имплементацию линковать и падает

Спасибо!

Но только ошибка при этом другая.

Это твои домыслы

Я верю свои глазам и врать мне тут нет никакого смысла
...
Рейтинг: 0 / 0
include context.h
    #39646681
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenЯ верю свои глазам и врать мне тут нет никакого смыслаА вот я тебе теперь не верю, раз ты в реале пишешь один код, а на форуме приводишь другой
...
Рейтинг: 0 / 0
include context.h
    #39646686
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadsemen.s.semenЯ верю свои глазам и врать мне тут нет никакого смыслаА вот я тебе теперь не верю, раз ты в реале пишешь один код, а на форуме приводишь другой

Я не могу сюда приводить рабочий код - NDA

В реале все точно такое же - только имя класса другое и методы другие
...
Рейтинг: 0 / 0
include context.h
    #39646690
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenЯ не могу сюда приводить рабочий код - NDAНу так сделай тест-кейс и выкладывай.
semen.s.semenВ реале все точно такое же - только имя класса другое и методы другиеВ реале точка с запятой была, из-за которой я зря на МастерЗива наехал.
...
Рейтинг: 0 / 0
include context.h
    #39646694
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, прости.
...
Рейтинг: 0 / 0
include context.h
    #39646710
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да все в порядке - мне уже МастерЗив все объяснил

Наезжать на МастерЗива не стоило - он очень уважаемый эксперт.

Еще раз спасибо.
...
Рейтинг: 0 / 0
include context.h
    #39646781
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadMasterZiv, прости.

НИ ЗА ЧТО!
НА ФСЮ ЖИСТЬ !
...
Рейтинг: 0 / 0
include context.h
    #39646798
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivAmKadMasterZiv, прости.

НИ ЗА ЧТО!
НА ФСЮ ЖИСТЬ !
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / include context.h
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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