我在Windows上的Visual Studio代码中使用MPI.我在WSL中编译并运行它,但是Vscode警告我找不到mpi.h: 我已经在WSL中安装了libopenmpi-dev,并将标题目录添加到VSCODE的设置(.vscode/c_cpp_properties.json): { "configurations": [ { "name": "WSL", "includePath": [ "${workspaceFolder}/**", "/usr/lib/gcc/x86_64-linux-gnu/7/include", "/usr/local/include", "/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed",
以下是关于 header-files 的编程技术问答
我正在使用VSCODE进行测试,以查看其在C中编辑代码的能力.在配置标头路径时,我遇到了一个问题,以促进标题导入,因为我将它们放在组织的单独文件夹中,所以我配置了Microsoft C/C ++扩展程序以添加Include Folder作为标头的路径,但是似乎并没有工作 { "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/include" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "c23", "cppStandard": "c++17", "intel
我在C ++中制作了一些程序.我需要包括一些标题(#include ).但是,当我使用#include和括号进行此操作时,我会发现错误,因为该标头不存在.我需要指定从程序文件到main文件的整个路径.但是,如果我将这个项目移至另一个地方,我需要再次指定所有内容,所以这很烦人. 我是否必须在标题的main文件中写入一些内容,可以将其包含在括号中?我需要在哪个文件夹中下载所有库.检查我的整棵树的数据. 这也发生在其他标题中. 我该怎么做? 数据: 我有一些名为C++的大文件夹,并且在我的项目中的单个文件夹中内部.我在此C++文件夹中还有一个文件夹Libraries,在单独的文件夹中,我也有一些文件夹. 我的树: C++ |-Project1 |-Project1 |-*the main program* |-Some other folders |-Project2, etc. |-Librarie
我正在尝试将OpenSSL与Visual Studio C项目一起使用. 我使用Visual Studio Nmake命令编译了OpenSSL nmake install 文件夹结构如下: bin include/openssl lib 内部include/openssl有.h标头文件. 在我的Visual Studio 2012中,我创建了一个空的一般C ++项目,其中包括C:\ openssl \ include [Project properties -> C/C++ -> General -> Additional Include Directories] 我还添加了lib目录和.lib文件. 但是当我编译代码时,我会得到 left of 'key_len' specifies undefined struct/union 'evp_cipher_st' 在我的代码中,我有这些行 const EVP_CIP
我在标头文件中定义了一个类,并在同一标头文件中实现了其函数. 但是,在定义这些函数的同时,我必须将内联关键字带有功能定义.否则编译器会出现编译时间错误. 我知道内联只是对编译器的提示.那么,为什么有必要将inline关键字放在功能定义中. 我正在使用带有QT的Visual Studio编译器来编译代码 这是代码 tempinline.h #ifndef TEMPINLINE_H #define TEMPINLINE_H #include "iostream" class tempinline { public: tempinline(); void printH(); }; void tempinline::printH() { std::cout
我正在使用Visual C ++ 2010 Express.我有一个表格(Form1.h),其中包含一个按钮(btn1)和一个标签(label1). 当我单击按钮时,我想从其他标头文件(testing.h)调用一个函数,然后继续更改标签中的文本. 我所拥有的就是这样... form1.h #include "testing.h" ... standard form code generated by Visual Studio private: System::Windows::Forms::Label^ label1; ... private: System::Void btn1_Click(System::Object^ sender, System::EventArgs^ e) { testfunc1(); } }; testing.h是... #ifndef _TESTING_FUNCS #define _T
我有以下项目结构: cmakelists.txt lib1/cmakelists.txt以及lib的所有CPP和标头文件 lib2/cmakelists.txt以及lib的所有CPP和标头文件 app/cmakelists.txt以及应用程序的所有CPP和标头文件 主要的cmakelists.txt看起来像: PROJECT( ${PROJECT_NAME} ) add_subdirectory(lib1) add_subdirectory(lib2) add_subdirectory(app) lib1/cmakelists.txt看起来像(剥离): SET(SOURCE file.cpp ) SET(HEADERS some_lib_header.h ) add_library( lib1 ${SOURCE} ${HEADERS} ) 和应用程序外观相同,除了add_executable: SET(SOURCE ma
我在Windows 7工作站上安装了Visual Studio 2010 Premium.加载测试C ++项目后,我注意到它无法找到iostream.我在 c:\ program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ Include 中看一下 我在测试虚拟机上安装了VS2010产品,此目录( ... \ vc \ include )填充了通常的文件夹和标头(您期望的材料)在包含目录中查找.) 我已经采取了以下步骤来纠正问题工作站上缺少的标头: 验证我没有A/V软件(我正在使用MS Security Essentials,实时已禁用) 卸载的Visual Studio 2010 Premium和所有其他程序和功能的子产品 使用/完整和/netfx参数运行VS2010卸载工具 从程序文件和程序文件(x86) 中删除了Visual Studio 10.0目录 从MSDN下载的ISO重新安装了Visual Studi
我正在使用Visual Studio 2008 C ++项目(Visa 32位). 我有以下 #include 在我的源代码中的指令. #include 在我的包含路径中,我指定了'example''的 parent目录,即 C:/.../include ,通往标头的完整路径看起来像 C:/.../include/example/header.h 但是,"示例"是符号链接(通过文件资源管理器'新快捷方式创建的'.lnk').我得到以下错误 c:... \ foo.cpp(37):致命错误c1083:无法打开包括文件:'example/header.h':没有这样的文件或目录 如果i 用实际目录替换符号链接,则项目将正确编译.出于实际原因,我需要它是符号链接.无论如何,是否可以使Visual Studio前处理器遵循链接? 解决方案 链接是符号链接(.lnk) 您确定自己没有创建快捷方式
Pragma指令的范围是什么?例如,如果我在标题文件A中说#pragma warning(disable: 4996),该文件中包含来自其他文件B,是否还可以禁用B内部的所有警告?还是我应该再次在文件末尾启用警告? 解决方案 直到翻译单元的末端.非正式地,tu是源文件,其中包含文件. 通常的模式是: #pragma warning (push) //save #pragma warning (disable: xxxx) #pragma warning (disable: yyyy) ... //code #pragma warning (pop) //restore prev settings 例如 //A.h #pragma once #pragma warning (disable: 1234) #include "b.h" //b.h #pragma once //when included after a.h 1234 will be dis
我正在使用openCV和gdal与Visual Studio 2019社区版本一起使用,我撰写了一些示例测试,以了解OpenCV和GDAL是否在我的计算机上工作正常,但是随着Header File的一些错误,所有这些错误都不会影响该错误编译程序和程序的运行或输出,除了那些标头文件语法错误外,一切都很好,这使我真的很困惑.我的代码下面是: /*opencv_test*/ #include #include #include #include using namespace cv; using namespace std; int main() { Mat image = Mat::zeros(300, 600, CV_8UC3); circle(image, Point(250, 150),
当我试图在Visual Studio中编译我的C ++项目时,我会遇到以下两个错误: E1574: Static assertion failed with "Windows headers require the default packing option. Changing this can lead to memory corruption. This diagnostic can be disabled by building with WINDOWS_IGNORE_PACKING_MISMATCH defined." 和 C2338: Windows headers require the default packing option. Changing this can lead to memory corruption. This diagnostic can be disabled by building with WINDOWS_IGNORE_
我有一个名为stdafx.h的标头文件,当然,该标题文件是预编译的. 我已经读到,我应该将这些文件包括在我的.cpp文件中,但是随附的标题文件中已经需要其中一些语句. 我应该将STDAFX添加到我的标题中还是将其添加到我的CPP中?我认为将其放入标题是一个好习惯,但是我似乎不得不将其放入标题中. 示例: stdafx包含freeglut. 我的类标题文件具有Glenum的属性. 我应该将STDAFX包括在类的.h中吗? 解决方案 stdafx.h 应该在项目中的每个CPP文件中首次包含. 考虑 c ++不编译标头文件,只有CPP文件. 因此,如果STDAFX是CPP文件中的第一个包含在CPP文件中,则编译器将拥有标题文件所需的一切,当它击中CPP文件中的标题文件 .. ,例如 您有A.CPP和A.H. A.H需要STD:字符串. 您有B.CPP和B.H B.H需要A.H因此B.H需要STD :: String.
VS-IDE将写入资源标头文件//{{NO_DEPENDENCIES}}. 该评论实际上是一项功能,可以防止(不必要)重建包括资源标头的CPP文件. . 但是,喜欢 sysdn 到"不良副作用". 在我们的项目中,我们确实在stdafx.h中包含resource.h进行预兼容.不幸的是,如果资源文件更改,则预编译的标头不会重建... 如果删除了no_depentencies,则有效(但它再次编写,如果通过IDE更改了资源). 是否有一种方法可以防止IDE每次更改文件时将//{{NO_DEPENDENCIES}}写入resource.h文件? 我认为最好的方法是将resource.h从预编译的标头文件中排除,然后将它们重新包含在所需的.H和.CPP文件中.这样,只有受影响的文件需要(手动!)重建而不是所有文件(如果PCH被重新编译,将会发生). 有任何评论? 解决方案 我同意您自己的建议:resource.h文件可能不应该是预编译标题文件的一部分.
例如,如果我更改标题或CPP中的函数中的签名,我希望它自动在另一个中更改.如果我在两个中添加一个新功能,则应出现在两者中.如果删除功能,它可能会评论另一个功能. 手动不得不复制一个人的更改似乎很愚蠢. 有些人提到 http://www.lazycplusplus.com/回答一个类似的问题,但是看来这是一个命令行工具,需要保存然后在特定文件上运行此外部工具.这仍然比我想象的要多的手动步骤.我希望在 时应用更改. 解决方案 您要寻找的是在Visual C ++中进行重构,不幸的是,它仅通过第三方插件可用,而据我所知,您不以"您键入"时尚. 我正在使用出色的 Visual Assist x 允许重命名方法,更改标志等等.
我正在尝试学习如何立即使用FLTK(在MSVC 2008中).我正确编译了所有库,但是当我尝试运行此程序时: #include "FL/Fl.H" #include "FL/Fl_Window.H" #include "FL/Fl_Box.H" int main(int argc, char *argv[]) { Fl_Window *window = new Fl_Window(340, 180); Fl_Box *box = new Fl_Box(20, 40, 300, 100, "Hello, World!"); box->box(FL_UP_BOX); box->labelfont(FL_BOLD + FL_ITALIC); box->labelsize(36); box->labeltype(FL_SHADOW_LABEL);
i具有以下文件夹结构: . ├── include │ └── ctset │ ├── hashtable.h │ └── set.h └── src └── hashtable └── hashtable.c 和hashtable.c include #include "ctset/hashtable.h", 但是YCM一直告诉我,它不知道我在标题中定义的类型并在源中使用. 我的.ycm_extra_conf.py几乎是一个默认的调整: # This file is NOT licensed under the GPLv3, which is the license for the rest # of YouCompleteMe. # # Here's the license text for this file: # # This is free and unencumbered software releas
vim在C方面非常聪明,因此,如果插入伪造标头文件(例如#include ),它通过提出带有以下错误的位置列表来抱怨: foo.c:1 | 20 |致命错误:stdioo.h:没有这样的文件或目录 ||汇编终止. 这很棒,但是无论出于何种原因,包括标头文件时都会遇到相同的错误.我知道这是一个vim问题b/c,我可以分别使用mpicc和mpiexec编译和执行程序.除此 有什么方法可以指示VIM忽略此标头文件,或者至少所有标头文件? 解决方案 文件位于何处? 通常是一个级别,例如/usr/include/mpi/mpi/mpi.h ,并且需要 才能访问它./p> 您可能需要在编译器的 -i 选项列表中添加另一个目录路径,或将目录路径添加到VIM的 Path path option apote actibal :help 'path 将使您在VIM一侧开始,您需要查找如何在当前设置中添加选项,不知道您是否使用Cmake
说我在文件evil_lair.hh中声明了一个类evilLord,并且在文件evil_lair.cc中实现.现在,我想添加函数bool minionDo(std::string command).是否有任何脚本会自动将声明和空函数定义放置在相应文件中? 我正在使用c-support vim-plugin,我发现有用.也许可以将此作为功能添加到此脚本... 解决方案 任务并不是那么微不足道 - 如果我们要正确地报告函数的范围.我已经从:GOTOIMPL(和:MOVEIMPL)命令中完成了工作,从我的其他解决方案 这是一个可以工作的脚本: :let lines = ["bool minionDo(std::string command)"] :e evil_lair.hh :call append( line('$'), lines ) :wq :e evil_lair.cc :call append( line('$'), lines ) :call append(