2016-08-23 11 views
-1

私は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(); 
(...) 
+3

「c」タグには特別な理由がありますか、それとも美しいタグを見つけるだけですか? – EOF

+1

このエラーを取得する1つの方法は、関数の外でグローバルスコープで呼び出しを行うことです。もう1つは、2つの.hppファイルが互いにインクルードしようとする循環インクルードを持つことです。 –

答えて

0

と呼ばれるshoud:

// PreyRun BEGIN 
#include "../PreyRun/interprocess.hpp" 
pr::InitPreySplitPipe(); 
// PreyRun END 

あなたは何も内から関数を呼び出していないので、コンパイラは新しい関数の宣言だと思っているようです。したがって、種類がintと仮定されています。そのうち、オーバーロードされた関数int pr:InitPreySplitPipe()は、void pr::InitPreySplitPipe()と競合します。これは、3つのエラーメッセージすべてを説明します。

+0

@AMS 'main()'のような関数内で移動する必要があります。あなたが 'main()'でそれを望まないなら、他の関数の一部として。途中で関数呼び出しがぶら下がっているだけではありません。それはコードの仕組みではありません。どのようにプログラムが呼び出されるのか、なぜ呼び出されるのか、プログラムはどのように知っているだろ本当に混乱している場合は、基本的なコーディングチュートリアルを読むことをお勧めします。 –

関連する問題