Есть ли способ избежать/решить различные ошибки сцепления W.R.T. C ++ 20 модулей [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Есть ли способ избежать/решить различные ошибки сцепления W.R.T. C ++ 20 модулей [закрыто]

Сообщение Anonymous »

Я пробую CPP 20 с модулями на Visual Studio 2022, большую часть времени он работает довольно хорошо, но когда я включаю Windows.h и winsock.h , i 'M Получение ошибки C2375 (переопределение функций, различная связь) на различных символах, таких как CloseSocket .
Я никогда не приходил к этой ошибке частичной части, когда использует Regulairair /Стандартный CPP, поэтому я подозреваю, что это специфично для работы с модулями. Вот небольшой пример: < /p>
main.cpp

Код: Выделить всё

import platform;
#include 

int main(int argc, char** argv)
{
x();
}
< /code>
pplatform.ixx
module;

#include 
#include 

export module platform;

export struct x
{
x()
{
connect(0, 0, 0);
}
};
< /code>
cmakelists.txt
get_filename_component(FOLDER_NAME ${CMAKE_CURRENT_LIST_DIR} NAME)
get_filename_component(PARENT_DIR ${CMAKE_CURRENT_LIST_DIR} PATH)
get_filename_component(CATEGORY_NAME ${PARENT_DIR} NAME)

add_executable (${FOLDER_NAME} "main.cpp" )
target_link_libraries(${FOLDER_NAME} PUBLIC "ws2_32.lib")
target_sources(${FOLDER_NAME} PRIVATE FILE_SET "${FOLDER_NAME}_sources" TYPE CXX_MODULES BASE_DIRS "${CMAKE_CURRENT_LIST_DIR}" FILES
"platform.ixx"
)

set_property(TARGET ${FOLDER_NAME} PROPERTY CXX_STANDARD 20)
< /code>
Я понимаю, что основная причина заключается в том, как перевода взаимодействуют с модулями. Заголовок Windows автоматически включает в себя первую версию Winsock, поэтому использование WinSock2 вызывает различные определения символов. Обычно это на самом деле не имеет большого значения, потому что блоки перевода независимы друг от друга, и любые неиспользованные символы разряжаются. Блок, который по какой -то причине также включает Windows.h 
этого достаточно, чтобы вызвать эту ошибку переопределения.
Я хотел бы понять, есть ли способ избежать этого, я могу Предотвратить переопределение, тщательно управляя тем, как и где используется Windows.h, но если какая -либо третья библиотека включает Windows.h может создать ту же проблему.

Подробнее здесь: https://stackoverflow.com/questions/794 ... 20-modules
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»