Программы на C++. Форум разработчиков
Anonymous
Как явно экземплярный конструктор пересылки в C ++?
Сообщение
Anonymous » 01 июл 2025, 12:08
Я пытаюсь явно экземпляры конструктора пересылки, используя компилятор
c ++ 20 с
GCC 13.3 , чтобы не помещать его определение в файл заголовка. Вот минимальный пример: < /p>
Код: Выделить всё
#pragma once
#include
#include
class Foo {
public:
template
requires std::convertible_to
explicit Foo(String&& s);
private:
std::string m_s;
};
< /code>
[list]
[*]Foo.cpp
[/list]
Код: Выделить всё
#include "Foo.h"
template
requires std::convertible_to
Foo::Foo(String&& s) : m_s{std::forward(s)} {}
template Foo::Foo(const std::string& s);
template Foo::Foo(std::string&& s);
< /code>
[list]
[*]test.cpp
[/list]
Код: Выделить всё
#include "Foo.h"
int main() {
Foo f1{"test"};
std::string test = "test";
Foo f2{test};
return 0;
}
< /code>
Код компилируется, но не может ссылаться со следующей ошибкой: < /p>
[main] Building folder: /home/bobeff/projects/cpp/test/build/Debug
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /home/bobeff/projects/cpp/test/build/Debug --config Debug --target all --
[build] [2/3 33% :: 0.149] Building CXX object CMakeFiles/test.dir/test.cpp.o
[build] [2/3 66% :: 0.156] Building CXX object CMakeFiles/test.dir/Foo.cpp.o
[build] [3/3 100% :: 0.188] Linking CXX executable test
[build] FAILED: test
[build] : && /usr/bin/g++ -g CMakeFiles/test.dir/test.cpp.o CMakeFiles/test.dir/Foo.cpp.o -o test && :
[build] /usr/bin/ld: CMakeFiles/test.dir/test.cpp.o: in function `main':
[build] /home/bobeff/projects/cpp/test/test.cpp:4:(.text+0x31): undefined reference to `Foo::Foo(char const (&) [5])'
[build] /usr/bin/ld: /home/bobeff/projects/cpp/test/test.cpp:6:(.text+0x72): undefined reference to `Foo::Foo(std::__cxx11::basic_string&)'
[build] collect2: error: ld returned 1 exit status
[build] ninja: build stopped: subcommand failed.
[proc] The command: /usr/bin/cmake --build /home/bobeff/projects/cpp/test/build/Debug --config Debug --target all -- exited with code: 1
[driver] Build completed: 00:00:00.220
[build] Build finished with exit code 1
Как сделать это правильно?
Подробнее здесь:
https://stackoverflow.com/questions/796 ... uctor-in-c
1751360901
Anonymous
Я пытаюсь явно экземпляры конструктора пересылки, используя компилятор [b] c ++ 20 [/b] с [b] GCC 13.3 [/b], чтобы не помещать его определение в файл заголовка. Вот минимальный пример: < /p> [list] [*][code]Foo.h[/code] [/list] [code]#pragma once #include #include class Foo { public: template requires std::convertible_to explicit Foo(String&& s); private: std::string m_s; }; < /code> [list] [*]Foo.cpp[/code] [/list] [code]#include "Foo.h" template requires std::convertible_to Foo::Foo(String&& s) : m_s{std::forward(s)} {} template Foo::Foo(const std::string& s); template Foo::Foo(std::string&& s); < /code> [list] [*]test.cpp[/code] [/list] [code]#include "Foo.h" int main() { Foo f1{"test"}; std::string test = "test"; Foo f2{test}; return 0; } < /code> Код компилируется, но не может ссылаться со следующей ошибкой: < /p> [main] Building folder: /home/bobeff/projects/cpp/test/build/Debug [build] Starting build [proc] Executing command: /usr/bin/cmake --build /home/bobeff/projects/cpp/test/build/Debug --config Debug --target all -- [build] [2/3 33% :: 0.149] Building CXX object CMakeFiles/test.dir/test.cpp.o [build] [2/3 66% :: 0.156] Building CXX object CMakeFiles/test.dir/Foo.cpp.o [build] [3/3 100% :: 0.188] Linking CXX executable test [build] FAILED: test [build] : && /usr/bin/g++ -g CMakeFiles/test.dir/test.cpp.o CMakeFiles/test.dir/Foo.cpp.o -o test && : [build] /usr/bin/ld: CMakeFiles/test.dir/test.cpp.o: in function `main': [build] /home/bobeff/projects/cpp/test/test.cpp:4:(.text+0x31): undefined reference to `Foo::Foo(char const (&) [5])' [build] /usr/bin/ld: /home/bobeff/projects/cpp/test/test.cpp:6:(.text+0x72): undefined reference to `Foo::Foo(std::__cxx11::basic_string&)' [build] collect2: error: ld returned 1 exit status [build] ninja: build stopped: subcommand failed. [proc] The command: /usr/bin/cmake --build /home/bobeff/projects/cpp/test/build/Debug --config Debug --target all -- exited with code: 1 [driver] Build completed: 00:00:00.220 [build] Build finished with exit code 1 [/code] Как сделать это правильно? Подробнее здесь: [url]https://stackoverflow.com/questions/79685794/how-to-explicitly-instantiate-forwarding-constructor-in-c[/url]
Как явно экземплярный конструктор пересылки в C ++?
Anonymous »
01 июл 2025, 12:50 » в форуме
C++
Я пытаюсь явно экземпляры конструктора пересылки, используя компилятор c ++ 20 с GCC 13.3 , чтобы не помещать его определение в файл заголовка. Вот минимальный пример:
Foo.h
#pragma once
#include
#include
class Foo {
public:
template...
0 Ответы
1 Просмотры
Последнее сообщение Anonymous
01 июл 2025, 12:50
ЭКЗЕМПЛЯРНЫЙ синглтон отсутствует
Гость »
21 сен 2023, 16:49 » в форуме
JAVA
Я хотел бы добавить функцию единого входа в существующее веб-приложение, и я пытаюсь использовать для этого pac4j. Я скачал демо-версию jee-jac4j и У меня повсюду возникают ошибки, которые указывают на отсутствие статические поля под названием...
0 Ответы
31 Просмотры
Последнее сообщение Гость
21 сен 2023, 16:49
0 Ответы
3 Просмотры
Последнее сообщение Anonymous
18 июн 2025, 14:54
Как проверить, является ли конструктор явно заданным по умолчанию
Anonymous »
04 май 2024, 17:23 » в форуме
C++
Например:
struct X {
X(){/***/}
X(const int& ){/***/}
X( int&&){/***/}
X(const X& ) = default;
X( X&&) = default;
X& operator=(const X& ){/***/}
X& operator=( X&&){/***/}
};
Класс X не является тривиальным и не является агрегатом.
Проверка...
0 Ответы
27 Просмотры
Последнее сообщение Anonymous
04 май 2024, 17:23
0 Ответы
24 Просмотры
Последнее сообщение Anonymous
02 фев 2025, 02:56