相关疑难解决方法(0)

递归函数可以内联吗?

inline int factorial(int n)
{
    if(!n) return 1;
    else return n*factorial(n-1);
}
Run Code Online (Sandbox Code Playgroud)

在我阅读本文时,发现如果编译器没有正确处理上述代码会导致"无限编译".

编译器如何决定是否内联函数?

c c++ compiler-construction

132
推荐指数
4
解决办法
4万
查看次数

找到一个或多个多重定义的符号

DebugUtil.h

#ifndef DEBUG_UTIL_H
#define DEBUG_UTIL_H

#include <windows.h>

int DebugMessage(const char* message)
{
    const int MAX_CHARS = 1023;
    static char s_buffer[MAX_CHARS+1];

    return 0;
}

#endif
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我收到此错误:

Terrain.obj:错误LNK2005:已在Loodus.obj中定义的"int __cdecl DebugMessage(char const*)"(?DebugMessage @@ YAHPBD @ Z)

Renderer.obj:错误LNK2005:已在Loodus.obj中定义的"int __cdecl DebugMessage(char const*)"(?DebugMessage @@ YAHPBD @ Z)

test.obj:错误LNK2005:已在Loodus.obj中定义的"int __cdecl DebugMessage(char const*)"(?DebugMessage @@ YAHPBD @ Z)

C:\ Users\Tiago\Desktop\Loodus Engine\Debug\Loodus Engine.exe:致命错误LNK1169:找到一个或多个多重定义的符号

但为什么会这样呢?我在标题中有#ifndef #define和#endif,因此不应该发生多个定义

c++

41
推荐指数
3
解决办法
7万
查看次数

标签 统计

c++ ×2

c ×1

compiler-construction ×1