Size: a a a

2021 February 13

t

theadla in supapro.cxx
почему можно бесконечно раз redeclare class member function, после того как задефайнили ее сразу после класса?
источник

t

theadla in supapro.cxx
где об этом можно прочитать?
источник

D

Danya in supapro.cxx
theadla
почему можно бесконечно раз redeclare class member function, после того как задефайнили ее сразу после класса?
Пример кода?
источник

t

theadla in supapro.cxx
например в хедере
class A{
   public:
   int p();
};
int A::p(){return 0;}
источник

t

theadla in supapro.cxx
а в сорсе
#include "union.h"
int A::p();
int A::p();
int A::p();
int A::p();
источник

D

Danya in supapro.cxx
theadla
например в хедере
class A{
   public:
   int p();
};
int A::p(){return 0;}
Ну здесь уже есть проблема
Если вы два раза включите этот файл куда-то, то у вас будет ODR violation
источник

D

Danya in supapro.cxx
theadla
а в сорсе
#include "union.h"
int A::p();
int A::p();
int A::p();
int A::p();
В Си/С++ разрешено бесконечное количество declarations, и один definition
источник

О

Олег in supapro.cxx
Привет! Не подскажете почему данный код не работает?
#include <iostream>
#include <string>

/* Перевірка символів вхідного повідомлення на приналежність алфавіту. */

void check(string str);
using namespace std;

int main()
{
   setlocale(0, "");
   string str;
   cout << "Enter your string: ";
   getline(cin, str);
   check(str);
   return 0;
}
void check(string str)
{
   for (int i = 0; i < str.size(); i++)
   {
       if (isalpha(str[i])) printf("%c is a letter!\n", str[i]);
       else printf("%c is not a letter!\n", str[i]);
   }
}


Пока не вынес в функцию отдельную, работало.
источник

П

Папа in supapro.cxx
какие есть хорошие алгоритмы для калькулятора? пока что слышал только о польской нотации

и какой из них самый быстрый?
источник

П

Папа in supapro.cxx
Олег
Привет! Не подскажете почему данный код не работает?
#include <iostream>
#include <string>

/* Перевірка символів вхідного повідомлення на приналежність алфавіту. */

void check(string str);
using namespace std;

int main()
{
   setlocale(0, "");
   string str;
   cout << "Enter your string: ";
   getline(cin, str);
   check(str);
   return 0;
}
void check(string str)
{
   for (int i = 0; i < str.size(); i++)
   {
       if (isalpha(str[i])) printf("%c is a letter!\n", str[i]);
       else printf("%c is not a letter!\n", str[i]);
   }
}


Пока не вынес в функцию отдельную, работало.
что именно не работает?
источник

D

Danya in supapro.cxx
Danya
В Си/С++ разрешено бесконечное количество declarations, и один definition
Если бы можно было только одну декларацию, то это была бы больная боль
источник

t

theadla in supapro.cxx
Danya
Если бы можно было только одну декларацию, то это была бы больная боль
а где про вещи типа ODR читать , чтоб каждый раз с таким же не спотыкаться?
источник

D

Danya in supapro.cxx
theadla
а где про вещи типа ODR читать , чтоб каждый раз с таким же не спотыкаться?
https://youtu.be/G_jcBrrYPAs
Может это поможет
источник

t

theadla in supapro.cxx
спасибо
источник

О

Олег in supapro.cxx
Папа
что именно не работает?
источник

AS

Anatoly Shirokov in supapro.cxx
using namespace std; выше подними на одну строчку
источник

О

Олег in supapro.cxx
аааааа
источник

О

Олег in supapro.cxx
точно, спасибо большое)
источник

D

Danya in supapro.cxx
theadla
а где про вещи типа ODR читать , чтоб каждый раз с таким же не спотыкаться?
Ну за правило надо взять, что declaration в хедере, definition в сорсе
Если очень хочется перенести в хедер definition, то надо добавить inline. Функции определённые в теле класса по умолчанию инлайн.
источник

D

Danya in supapro.cxx
Danya
Ну за правило надо взять, что declaration в хедере, definition в сорсе
Если очень хочется перенести в хедер definition, то надо добавить inline. Функции определённые в теле класса по умолчанию инлайн.
Ну и определение любого шаблона всегда в хедере (упрощённо)
источник