Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

10
禁用单个警告错误
有没有办法用Visual Studio禁用cpp文件中的单个警告行? 例如,如果我捕获一个异常但不处理它,则会收到错误4101(未引用的局部变量)。有没有一种方法可以仅在该函数中忽略它,否则可以在编译单元中报告它?此刻,我将#pragma warning (disable : 4101)文件放在顶部,但是很明显,整个文件都将其关闭。

8
如何在我的Linux主机上安装Raspberry Pi交叉编译器?
我正在尝试为在我的Ubuntu计算机上工作的Raspberry Pi进行交叉编译。 在最初的尝试中,我使用的是arm-linux-gnueabi编译器,该编译器可在Ubuntu存储库中找到。我得到了这个工作。我能够建立所有依赖关系,并在cmake项目中使用交叉编译器。 但是,我相信我应该使用hf版本,因此我切换到了arm-linux-gnueabihf。然后我意识到这对Raspberry Pi不起作用,因为它是armv6。 谷歌搜索后,我从GitHub找到了预构建的工具链。 我下载了工具链,但是我不太了解如何“安装”它。我将文件提取到我的主目录。目录结构如下所示: /gcc-linearo-arm-linux-gnueabihf-raspbian /arm-linux-gnueabihf /bin (contains g++, gcc, etc) /lib (contains libstdc++ library) /bin (contains arm-linux-gnueabihf-g++, arm-linux-gnueabihf-...) /lib (gcc lib stuff) 如果将目录更改为INNER bin文件夹,则可以从终端编译测试程序而不会出现任何问题。 ~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/ arm-linux-gnueabihf/bin$ g++ test.cpp -o test 然后,我尝试在OUTER bin文件夹中编译一个测试程序,其中包含工具的前缀版本。 ~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin$ arm-linux-gnueabihf-g++ test.cpp -o test 但是,当我尝试现在(从内部bin目录外部)使用编译器时,它找不到工具链随附的libstdc ++共享库: arm-linux-gnueabihf-gcc: error while loading shared libraries: libstdc++.so.6: …

23
获取可执行文件的路径
我知道以前曾问过这个问题,但是我仍然没有看到满意的答案,也没有明确的“不,这不能完成”,所以我再问一次! 我要做的就是以独立于平台的方式获取当前正在运行的可执行文件的路径,可以是绝对路径,也可以是相对于调用可执行文件的位置的路径。虽然我boost :: filesystem :: initial_path是我的麻烦的答案,但这似乎只能处理问题的“与平台无关”的部分-它仍然返回从中调用应用程序的路径。 出于某种背景,这是一个使用Ogre的游戏,我正在尝试使用Very Sleepy进行概要分析,该应用程序从其自己的目录中运行目标可执行文件,因此,当然,在加载时,游戏找不到任何配置文件等,并立即崩溃。我希望能够将其传递给配置文件的绝对路径,我知道它将始终与可执行文件一起存在。在Visual Studio中进行调试也是如此-我希望能够在不必设置工作目录的情况下运行$(TargetPath)。
114 c++  boost  executable 

3
通用Lambda在C ++ 14中如何工作?
通用Lambda如何auto在C ++ 14标准中工作(关键字作为参数类型)? 它是否基于C ++模板,其中每个不同的参数类型,编译器都会生成具有相同主体但被替换类型的新函数(编译时多态性)?或者它更类似于Java的泛型(类型擦除)? 代码示例: auto glambda = [](auto a) { return a; };
114 c++  lambda  auto  c++14 


1
如何对可变参数函数中的所有参数调用std :: forward?
我只是在编写一个通用对象工厂,并使用boost预处理器元库制作一个可变参数模板(使用2010,但它不支持它们)。我的函数使用rval引用并std::forward进行完美的转发,这让我开始想...当C ++ 0X出现并且我有一个标准的编译器时,我将使用真实的可变参数模板进行此操作。不过,我std::forward该如何谈谈? template <typename ...Params> void f(Params... params) // how do I say these are rvalue reference? { y(std::forward(...params)); //? - I doubt this would work. } 我能想到的唯一方法是需要手动解压缩... params,而且我也还没有。有没有一种更快的语法可以工作?

19
如何从交换机内部跳出循环?
我正在写一些看起来像这样的代码: while(true) { switch(msg->state) { case MSGTYPE: // ... break; // ... more stuff ... case DONE: break; // **HERE, I want to break out of the loop itself** } } 有没有直接的方法可以做到这一点? 我知道我可以使用一个标志,并通过在开关之后放置条件中断来中断循环。我只想知道C ++是否已经为此做了一些构造。

7
C99 stdint.h标头和MS Visual Studio
令我惊讶的是,我刚刚发现MS Visual Studio 2003向上版本中缺少C99 stdint.h。我确定它们是有原因的,但是有人知道我可以在哪里下载副本吗?没有此标头,我将无法定义有用的类型,例如uint32_t等。
113 c++  c  visual-studio  c99 


10
通过函数指针调用C ++类方法
如何获取类成员函数的函数指针,然后再使用特定对象调用该成员函数?我想写: class Dog : Animal { Dog (); void bark (); } … Dog* pDog = new Dog (); BarkFunction pBark = &Dog::bark; (*pBark) (pDog); … 另外,如果可能的话,我也想通过指针来调用构造函数: NewAnimalFunction pNew = &Dog::Dog; Animal* pAnimal = (*pNew)(); 这可能吗?如果可以,这样做的首选方式是什么?

9
C ++对象实例化
我是试图理解C ++的C程序员。许多教程使用片段演示了对象实例化,例如: Dog* sparky = new Dog(); 这意味着以后您将执行以下操作: delete sparky; 这是有道理的。现在,在不需要动态内存分配的情况下,是否有任何理由使用以上内容代替 Dog sparky; 一旦火花超出范围就让析构函数被调用? 谢谢!
113 c++  instantiation 


9
是“ int main;” 有效的C / C ++程序?
我问是因为我的编译器似乎是这样认为的,即使我没有。 echo 'int main;' | cc -x c - -Wall echo 'int main;' | c++ -x c++ - -Wall Clang对此不发出警告或错误,并且gcc仅发出温和的警告:'main' is usually a function [-Wmain],但仅当编译为C时发出。指定a -std=似乎无关紧要。 否则,它将编译和链接正常。但是在执行时,它立即终止SIGBUS(对我来说)。 通读以下内容的(优秀)答案:main()在C和C ++中应该返回什么?以及通过语言规范的快速grep,在我看来,肯定需要一个主要功能。但是gcc -Wmain('main' 通常是一个函数)的废话(以及此处缺少错误)似乎暗示了其他方面。 但为什么?是否有一些奇怪的极端情况或“历史性”用法?有人知道会给什么吗? 我的意思是,我真的认为这在托管环境中应该是一个错误,是吗?
113 c++  c  function  main  entry-point 

17
无法加载DLL(找不到模块HRESULT:0x8007007E)
我有一个包含非托管C ++ API代码的dll库,需要在.NET 4.0应用程序中使用。但是我尝试加载dll的每种方法都会出现错误: 无法加载DLL“ MyOwn.dll”:找不到指定的模块。(来自HRESULT的异常:0x8007007E) 我已阅读并尝试了在互联网上找到的许多解决方案。什么都没有 我尝试使用以下方法: [DllImport("MyOwn.dll", CallingConvention = CallingConvention.Cdecl)] [return: MarshalAs((UnmanagedType.I4))] public static extern Int32 MyProIni(string DBname, string DBuser_pass, string WorkDirectory, ref StringBuilder ErrorMessage); 当我尝试阅读本文并运行本示例(从下载的代码中)时,它可以正常运行(所用的dll在bin / debug文件夹中) 我已经复制了我的dll(以及它依赖的所有文件到我的bin文件夹中)。 我也尝试了这种方法,但是遇到了同样的错误: [DllImportAttribute(MyOwnLibDllPath, EntryPoint="TMproIni")] [return: MarshalAs(UnmanagedType.I4)] public static extern int MyproIni(string DBname, string DBuser_pass, string WorkDirectory, ref StringBuilder ErrorMessage); 有什么建议?
113 c#  c++  dll  pinvoke 

5
C ++映射访问丢弃限定符(const)
以下代码说,将map传递const到operator[]方法中会舍弃限定符: #include <iostream> #include <map> #include <string> using namespace std; class MapWrapper { public: const int &get_value(const int &key) const { return _map[key]; } private: map<int, int> _map; }; int main() { MapWrapper mw; cout << mw.get_value(42) << endl; return 0; } 这是因为在地图访问中可能进行分配吗?不能将具有地图访问权限的函数声明为const? MapWrapper.cpp:10: error: passing ‘const std::map<int, int, std::less<int>, …
113 c++  stl  const  maps 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.