私はMicrosoft Visual Studio Community 2015 Update 3を使用していて、DLLをコンパイルしています。私はInitPreySplitPipe関数を呼びたいと思っています。私はすでに:: pr :: InitPreySplitPipeでそれを呼び出そうとしましたが、interprocess.cppコードをgame_local.cppとinterprocess.hppコードにコピーしてgame_local.hにコピーし、そこから呼び出しました。どちらか。C++ MSVC dllコンパイルエラーの型指定子と再定義がありません
興味があれば、私はGitHub repositoryにすべてのコードを設定しました。読書と私の悪い英語のため申し訳ありませんのために
ありがとう:/
コンパイラ出力:
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int
Error C2371 'pr::InitPreySplitPipe': redefinition; different basic types
Error C2556 'int InitPreySplitPipe(void)': overloaded function differs only by return type from 'void pr::InitPreySplitPipe(void)'
interprocess.hpp
namespace pr
{
(...)
void InitPreySplitPipe();
(...)
}
interprocess.cpp
#include "interprocess.hpp"
namespace pr
{
(...)
void InitPreySplitPipe()
{
pipe_preysplit = CreateNamedPipe("\\\\.\\pipe\\" PREYSPLIT_PIPE_NAME,PIPE_ACCESS_OUTBOUND | FILE_FLAG_OVERLAPPED, PIPE_TYPE_MESSAGE | PIPE_REJECT_REMOTE_CLIENTS, 1, 256 * 1000, 0, 0, NULL);
if (pipe_preysplit == INVALID_HANDLE_VALUE)
{
return;
}
std::memset(&overlapped, 0, sizeof(overlapped));
overlapped.hEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
if (overlapped.hEvent == NULL)
{
pipe_preysplit = INVALID_HANDLE_VALUE;
}
}
(...)
}
// funcの場所ションはgame_local.cppで
game_local.cpp
(...)
#include "../PreyRun/interprocess.hpp"
pr::InitPreySplitPipe();
(...)
「c」タグには特別な理由がありますか、それとも美しいタグを見つけるだけですか? – EOF
このエラーを取得する1つの方法は、関数の外でグローバルスコープで呼び出しを行うことです。もう1つは、2つの.hppファイルが互いにインクルードしようとする循環インクルードを持つことです。 –