【问题标题】:Why does my program only work with the debug build?为什么我的程序只适用于调试版本?
【发布时间】:2019-07-15 07:25:10
【问题描述】:

我有一个项目,它的 main 方法从另一个源文件 BigDog(int) 访问另一个方法。我很确定代码是正确的,但 CodeBlocks 似乎无法检测到该方法的定义,除非我使用 CodeBlocks 中的调试构建来构建另一个文件。在 Release 中,我在构建时收到以下错误:

错误:未定义对“BigDog(int)”的引用

为什么会这样?

main.cpp

#include <iostream>

using namespace std;

void BigDog(int KibblesCount);

int main()
{
   BigDog(3);
   return 0;
}

mystuff.cpp

 #include <iostream>

 using namespace std;

 void BigDog(int KibblesCount)
 {
     cout << KibblesCount;
 }

【问题讨论】:

  • 代码没有问题。不知何故,您构建它是错误的,也许您的发布版本项目设置不正确。在这个距离很难分辨。
  • 如果您引用了尝试发布版本时收到的确切错误消息,可能会有所帮助。
  • @errandstudy 这意味着当您进行发布构建时,您不会编译和/或链接 mystuff.cpp。换句话说,您的项目设置错误以进行发布构建。我猜您只是将 mystuff.cpp 添加到项目的调试部分。
  • 试着改掉using namespace std的习惯。该前缀的存在是有原因的:保护您免受命名冲突,并明确这些函数、数据结构和其他内容的来源。
  • @RickPat,没有迹象表明他有这样的头文件。

标签: c++ codeblocks


【解决方案1】:

如果您要在代码块中添加新文件,请务必选中对话框中的复选标记以将其添加到调试和发布版本中。

将声明移到头文件并在需要的地方包含它也是更好的做法,如下所示:

main.cpp:

#include "mystuff.h"

int main()
{
    BigDog(3);
    return 0;
}

mystuff.h:

#pragma once

void BigDog(int KibblesCount);

mystuff.cpp:

#include "mystuff.h"

#include <iostream>

void BigDog(int KibblesCount)
{
    // add a newline so the line gets printed immediately
    std::cout << KibblesCount << "\n"; 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多