C++ MSVC dll 编译错误缺少类型说明符和重新定义
Posted
技术标签:
【中文标题】C++ MSVC dll 编译错误缺少类型说明符和重新定义【英文标题】:C++ MSVC dll compiling error missing type specifier and redefinition 【发布时间】:2016-08-23 21:22:09 【问题描述】:我正在使用 Microsoft Visual Studio Community 2015 Update 3 并正在编译一个 dll。我想调用函数 InitPreySplitPipe 我已经尝试使用 ::pr::InitPreySplitPipe 调用它,我将 interprocess.cpp 代码复制到 game_local.cpp 并将 interprocess.hpp 代码复制到 game_local.h 并从那里调用它但是没有用要么。
如果有人感兴趣,我已经设置了一个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;
(...)
// 函数应该在哪里调用
game_local.cpp
(...)
#include "../PreyRun/interprocess.hpp"
pr::InitPreySplitPipe();
(...)
【问题讨论】:
c
-tag 有什么特别的原因,还是你只是觉得这个标签美观?
获得此错误的一种方法是在全局范围内进行调用,在任何函数之外。另一种是循环包含,其中两个 .hpp 文件尝试相互包含。
【参考方案1】:
在game_local.cpp中:
// PreyRun BEGIN
#include "../PreyRun/interprocess.hpp"
pr::InitPreySplitPipe();
// PreyRun END
您没有从任何内部调用该函数,因此编译器认为这是一个新的函数声明。因此假定int
类型,其中重载函数int pr:InitPreySplitPipe()
与您的void pr::InitPreySplitPipe()
冲突。这解释了所有 3 条错误消息。
【讨论】:
@AMS 您需要将其移动到函数中,例如main()
。如果您不想在main()
中使用它,那么作为其他功能的一部分。你不能只是在不知名的地方有悬空的函数调用。这不是代码的工作方式。程序如何知道何时以及为何调用它?如果你真的很困惑,我建议阅读基本的编码教程。以上是关于C++ MSVC dll 编译错误缺少类型说明符和重新定义的主要内容,如果未能解决你的问题,请参考以下文章
C++Qt5+win10+MSVC2015 64bit构建程序,Release编译成功后使用windeployqt.exe发布程序使用于win7出现缺少MSVCP140.dll!!!