标签: codeblocks

使用(模拟)模板头文件时的“多重定义”

我知道 C++ 模板函数的定义必须放在头文件中。然而,出于提高我正在制作的(可能)大型库的可读性和结构的原因,我将声明与实现分开,放入“模拟”标头(其中#include实现文件,非常类似于这种文件结构)。请注意,我是否知道模板化函数的实现必须在编译时包含在内,并且我正在这样做。

\n\n

简而言之,当我将非模板化函数声明添加到实现文件中时,出现“多重定义”错误。下面是带有示例的长解释。

\n\n

当“模拟”头文件+实现文件对仅包含模板化函数的声明/实现对时,一切正常。当我仅在实现文件中添加新模板化函数的实现时,它也可以正常工作。

\n\n

工作示例(当我想使用此功能时我会这样做)#include "algo.h"main.cpp

\n\n

“模拟”头文件 algo.h

\n\n
#ifndef ALGO_H\n#define ALGO_H\n\nnamespace fl{\n    template <typename Compare>\n    void algo(.. non-templated args .., Compare order = std::less<int>());\n}\n\n#include "tpp/algo.cpp"\n\n#endif // ALGO_H\n
Run Code Online (Sandbox Code Playgroud)\n\n

实现文件 tpp/algo.cpp : (目前只是algo.tpp )
\n注意:使用该tpp/.cpp文件是在初始版本中,现在我使用每个@\xcf\x80\xce\xac\xce\xbd\xcf 的.tpp文件\x84\xce\xb1 \xe1\xbf\xa5\xce\xb5\xe1\xbf\x96 \的建议,解释在最后。

\n\n
#ifndef TPP_ALGO\n#define TPP_ALGO\n\n#include "../algo.h"\n\nnamespace fl{\n\n    template <typename Compare>\n …
Run Code Online (Sandbox Code Playgroud)

c++ templates codeblocks header-files

3
推荐指数
1
解决办法
2916
查看次数

代码块中的默认模板

我想在代码块中设置默认模板代码。如何在每次打开新项目或空文件时出现的代码块中设置默认代码。

codeblocks

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

代码块(新建项目/重命名主文件)

当我在代码块中创建一个新项目File->New->project->console application->Go->C++-><project title>->GNU compiler->finish(调试和发布框都被选中)时,会创建一个项目,其.cpp文件名为main.

我的问题是如何重命名这个主文件。

在问这个问题之前我已经尝试解决它,但它包含很多步骤。

我尝试了两种方法(一种方法给了我解决方案,另一种方法表明文件已损坏)。

其实我想找到一种快速的方法来重命名这个主文件?如果有什么方法请告诉我。

我使用的两种方法(下面提到)

  1. File->New->project->console application->Go->C++-><project title>->GNU compiler->finish 然后转到本地磁盘(保存项目的位置)重命名main文件。在代码块中再次打开项目。打开主文件,提示文件不存在。这种方法速度很快,但未能重命名main。

  2. File->New->project->console application->Go->C++-><project title>->GNU compiler->finish. then in code blocks at left side bar Sources/main/right click on main/remove file from project (then code blocks indicate you have deleted this main file but actually its not when I checked in local disk, main file was there). Then I create a new.cpp` 文件作为文件/新建/文件以及接下来的简单步骤。

所以最后我得到了我想要的。一个带有文件的新项目(我想要的文件.cpp名)。.cpp但我不满足,我想要一个快速的方法。

codeblocks

3
推荐指数
1
解决办法
2万
查看次数

警告:您的系统“Code::Blocks”上缺少“aclocal-1.13”

在我的程序目录上执行 ./configure 命令后,在我的 kali-linux 机器上安装 Code::Blocks 期间,一切都很好,直到我尝试制作我的程序。这是我的错误消息:

WARNING: 'aclocal-1.13' is missing on your system. 
  You should only need it if you modified 'acinclude.m4' or 'configure.ac' or m4 files included by 'configure.ac'. 
  The 'aclocal' program is part of the GNU Automake package:  http://www.gnu.org/software/automake 
  It also requires GNU Autoconf, GNU m4 and Perl in order to run: 
     http://www.gnu.org/software/autoconf     
     http://www.gnu.org/software/m4/ 
     http://www.perl.org/ 
make: *** [aclocal.m4] Error 127
Run Code Online (Sandbox Code Playgroud)

我尝试了互联网上的每一个解决方案,但没有任何效果,包括安装 automake 工具的 autoreconf 命令,libtool 已经安装在我的最新机器上。还尝试安装错误消息所说的 m4 和 perl 但我发现它们也已安装

如果可以为我提供另一种安装 Code:blocks IDE 的方法,我会非常高兴,谢谢。

linux codeblocks

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

WinMain 可以编译,但 wWinMain 不能在 CodeBlocks 中

所以我尝试使用 Win32 在CodeBlocks中创建一个窗口,到目前为止只有这个版本的 WinMain 可以工作(注意:这只是一个简单而幼稚的示例):

#include <windows.h>

INT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow ) {
    MessageBox( NULL, "Title", "Message", MB_OKCANCEL );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这个版本没有:

#include <windows.h>

INT WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, INT nCmdShow ) {
    MessageBox( NULL, "Title", "Message", MB_OKCANCEL );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,后者期望第三个参数是指向宽字符字符串的指针,而前者则不然。但是当我在 CodeBlocks 中编译时,我得到的只是这条消息:

对 WinMain@16 的未定义引用

显然,CodeBlocks 期望 WinMain 的版本不接收 LPWSTR 值作为参数。我的问题是,如何配置 CodeBlocks 以便它与 wWinMain 一起编译?

c++ winapi codeblocks winmain

3
推荐指数
1
解决办法
2688
查看次数

模板声明不能出现在块作用域中

我正在学习李普曼,而且我只是在学习。我在这里尝试编写一个代码,该代码将返回向量中的最小元素。当我在 Codeblocks 中编译代码时,它显示:“模板声明不能出现在块作用域中”。这是代码:

#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
    template <class elemType>
    elemType save;
    elemType min (const std::vector<elemType> &vec) {
      std::vector<elemType>::iterator it = vec.begin(), end_it = vec.end();
      std::vector<elemType>::iterator iter = std::next(it, 1);
      for ( ; it != end_it; it++ ) {
        if ( *it < *(it + 1) ) {
          save = *it;
        }
        if (save < *it) {
          save = *it;
        }
      }
    };

    int massiv[10] = {35, 66, 98, 15, 32, 41, …
Run Code Online (Sandbox Code Playgroud)

c++ vector codeblocks

3
推荐指数
1
解决办法
2万
查看次数

Valgrind 显示问号

我已经使用 Code::Blocks 编译了一个程序。我已经在“调试”目标下打开了“生成调试符号”,并且还关闭了“剥离所有符号...”但是当我使用 Valgrind 运行程序时,我在输出中出现问号:

$ valgrind --leak-check=yes --track-origins=yes --log-file=valgrind_output.txt
~/bin/myprg

==3766== Memcheck, a memory error detector
==3766== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==3766== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==3766== Command: /home/xxxxxx/bin/myprg
==3766== Parent PID: 3209
==3766== 
==3766== Warning: client switching stacks?  SP change: 0xffefff978 --> 0xffed13da0
==3766==          to suppress, use: --max-stackframe=3062744 or greater
==3766== Invalid write of size 4
==3766==    at 0x40892B: ??? (in /home/xxxxxx/bin/myprg)
==3766==    by 0x40275C: …
Run Code Online (Sandbox Code Playgroud)

c++ linux valgrind codeblocks

3
推荐指数
1
解决办法
3491
查看次数

CLion:构建程序无法在 cmd 中运行

当我尝试在 中运行我的 C++ 项目时Code::Blocks IDE,它将在 Windows CMD 中运行该程序,没有任何问题。如果我尝试通过资源管理器运行该程序,它也会在 CMD 中运行,没有任何问题。

但是,如果我尝试通过运行完全相同的程序CLion,它本身会运行良好CLionCLion有一个内置终端,同时Code::Blocks使用 Windows CMD)。但是如果我尝试通过资源管理器运行该程序,我会收到这个奇怪的错误:

错误 1 ​​打印屏幕

如果我按“确定”:

错误 1 ​​打印屏幕

有人知道问题是什么吗?我该如何解决?

更多信息: Code::Blocks作为一个软件包提供MinGW。我必须CLion手动下载工具链。我下载并安装了MinGW-w64,因为我不知道其他任何东西,这就是 Code::Blocks 也使用的。

奇怪的是 MinGW-w64 安装在“Program Files (x86)”中,而不是“Program Files”中。

c++ codeblocks mingw-w64 clion c++17

3
推荐指数
1
解决办法
2253
查看次数

我的 OGL 程序找不到 gl.h 和 glu.h 了

我有一个 Ogl 程序,我用它来编译得很好。然而,几个月没有处理它之后,我回来了,发送我的 IDE 代码块来编译它,然后返回:

/.../glew-2.1.0/include/GL/glew.h|1205|错误:GL/glu.h:没有这样的文件或目录|

/.../glfw-2.7.9/include/GL/glfw.h|176|错误:GL/gl.h:没有这样的文件或目录|

因此它打开 glew 标题并指向这些行:

  #include <GL/gl.h>
  #include <GL/glu.h>
Run Code Online (Sandbox Code Playgroud)

一些观察。1)上次效果很好。2)我不使用谷氨酸。

我相信某些配置被无意中更改了。问题是:在哪里?

我的第一个假设是 IDE。我看了看,一切似乎都正确。在项目构建选项的“链接器设置”选项卡中,glfw 和 glew 的 .so 库文件就在那里。在“搜索目录”选项卡中,有指向 glew/include/GL 和 /glfw/include/GL 的链接

第一个目录中是 glfw 标头。对于后者,glew.h 和其他三个与 glew 相关的头文件。

在整个系统上寻找 glu.h 和 gl.h 头文件,我什么也没找到。我做了一个

sudo apt-get install mesa-common-dev

但当我尝试编译程序时它没有改变任何东西。

是否还有其他代码块设置需要调整而我缺少?关于系统配置错误,我还能在哪里找到有用的信息?哪个原因似乎更有可能?

c opengl glew codeblocks glfw

3
推荐指数
1
解决办法
5317
查看次数

如何在 Code::Blocks 17.12 中设置暗模式?

我正在使用Code::Blocks 17.12,我想设置暗模式主题,但我不知道如何设置。

codeblocks

3
推荐指数
1
解决办法
2万
查看次数

标签 统计

codeblocks ×10

c++ ×5

linux ×2

c ×1

c++17 ×1

clion ×1

glew ×1

glfw ×1

header-files ×1

mingw-w64 ×1

opengl ×1

templates ×1

valgrind ×1

vector ×1

winapi ×1

winmain ×1