Tag: g ++

在C ++中省略return语句

我只是从我用Strawberry Perl获得的Windows版本g ++中发现了一些奇怪的行为。 它使我可以省略一个返回声明。 我有一个成员函数返回一个由两个指针组成的结构,叫做boundTag : struct boundTag Box::getBound(int side) { struct boundTag retBoundTag; retBoundTag.box = this; switch (side) { // set retBoundTag.bound based on value of "side" } } 这个函数给了我一些不好的输出,我发现它没有return语句。 我本来打算返回retBoundTag但忘了实际写回报语句。 一旦我添加return retBoundTag; 一切(曾经)都很好。 但是我testing了这个函数,并boundTag得到了正确的boundTag输出。 即使现在,当我删除返回语句,g ++编译它没有警告。 WTF? 它猜测返回retBoundTag ?

😃(和其他unicode字符)不能被g ++识别的标识符

我发现,即使启用了-fextended-identifiers选项,我也不能使用😃作为g ++ 4.7的有效标识符: int main(int argc, const char* argv[]) { const char* 😃 = "I'm very happy"; return 0; } main.cpp:3:3:错误:在程序中丢失'\ 360' main.cpp:3:3:错误:在程序中丢失'\ 237' main.cpp:3:3:错误:在程序中丢失'\ 230' main.cpp:3:3:错误:在程序中丢失'\ 203' 经过一些Googlesearch之后,我发现UTF-8字符在标识符中还不被支持,但通用字符名称应该可以工作。 所以我把我的源代码转换为: int main(int argc, const char* argv[]) { const char* \U0001F603 = "I'm very happy"; return 0; } main.cpp:3:15:错误:通用字符\ U0001F603在标识符中无效 所以显然😃不是一个有效的标识字符。 但是,该标准特别允许附件E.1中的范围为10000-1FFFD字符,并且不允许它作为E.2中的初始字符。 我的下一个努力是看看是否有其他允许的unicode字符的工作 – 但我没有试过。 公安条例(💩)的性质甚至不重要。 […]

OpenCV 2.3编译问题 – Undefined Refence – Ubuntu 11.10

提前感谢任何帮助… 系统信息:Ubuntu 11.10(64位)与OpenCV 2.3(今天安装) 我想在OpenCV 2.3中编译一些非常简单的代码,但是我得到一个奇怪的错误。 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> int main(){ cv::Mat image=cv::imread("img.jpg"); cv::namedWindow("My Image"); cv::imshow("My Image",image); cv::waitKey(0); return 1; } whateverrrrrrrrrrrrr,我收到这些错误消息… -SG41:~/Desktop$ g++ `pkg-config opencv –cflags –libs` -o test_1 test_1.cpp /tmp/ccCvS1ys.o: In function `main': test_1.cpp:(.text+0x44): undefined reference to `cv::imread(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)' test_1.cpp:(.text+0x8e): undefined reference to `cv::namedWindow(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, […]

用gcc编译一个C ++程序

问题:如何用gcc编译器编译C ++程序? info.c: #include<iostream> using std::cout; using std::endl; int main() { #ifdef __cplusplus cout << "C++ compiler in use and version is " << __cplusplus << endl; #endif cout <<"Version is " << __STDC_VERSION__ << endl; cout << "Hi" << __FILE__ << __LINE__ << endl; } 当我尝试编译info.c $ gcc info.C Undefined first referenced symbol in […]

如何指定库path的偏好?

我正在编译一个使用g++和ld的c ++程序。 我有一个.so库,我想在链接过程中使用。 然而,在/usr/local/lib存在一个相同名称的/usr/local/lib ,而ld则是通过我直接指定的库来select该库。 我该如何解决这个问题? 对于下面的例子,我的库文件是/my/dir/libfoo.so.0 。 我试过的东西不起作用: 我的g ++命令是g++ -g -Wall -o my_binary -L/my/dir -lfoo bar.cpp 将/my/dir添加到我的$PATH en`variables的开始或结尾处 添加/my/dir/libfoo.so.0作为g ++的参数

C ++标准库和Boehm垃圾收集器

我想在Linux / AMD64 / Debian上用GCC 4.6开发一个multithreading的C ++应用程序(最终大部分的C ++代码将由应用程序本身生成,可以被视为一种高级的域特定语言)可能是最新的C ++ 11标准)。 我真的想用Boehm的保守的垃圾收集器来分配我所有的堆,因为我想用new(GC)分配,而且从不打扰delete 。 我假设Boehm的GC工作得很好。 使用C ++(而不是C)的主要动机是C ++标准库提供的所有algorithm和集合std::map … std::vector 。 Boehm的GC提供了一个gc_allocator<T>模板(在其文件gc / gc_allocator.h中)。 我应该重新定义operator ::new作为Boehm的吗? 或者我应该使用显式的分配器模板参数设置为一些gc_allocator所有集合模板? 我不明白第二个模板参数(分配器)对std :: vector的作用吗? 是用来分配vector内部数据还是分配每个单独的元素? 那么std::string -s呢? 如何使他们的数据GC分配? 我应该有我自己的string,使用basic_string模板与gc_allocator ? 有没有办法让GC_malloc_atomic而不是GC_malloc分配的char内部数组? 或者你build议不要使用Boehm GC与g ++编译的应用程序? 问候。

在C ++中的尾recursion

有人能告诉我一个简单的尾recursion函数在C + +? 为什么尾部recursion更好呢? 还有什么其他types的recursion除了尾recursion吗?

错误:免费():无效的下一个大小(快):

这是什么奇怪的错误,我得到了什么? 我在Ubuntu 10.10上使用g ++编译C ++。 当我运行可执行文件时,它会随机popup(可能是8小时内的2次,每10小时编译一次)。 但是,如果我干净并重新编译,大部分时间都会消失。 *** glibc detected *** ./emailQueue.app: free(): invalid next size (fast): 0x0000000001c40270 *** ======= Backtrace: ========= /lib/libc.so.6(+0x774b6)[0x7f490d95e4b6] /lib/libc.so.6(cfree+0x73)[0x7f490d964c83] ./emailQueue.app[0x401f47] /lib/libc.so.6(__libc_start_main+0xfe)[0x7f490d905d8e] ./emailQueue.app[0x401cc9] ======= Memory map: ======== 00400000-0040d000 r-xp 00000000 08:01 1311132 /home/server/Projects/email/emailQueue.app 0060d000-0060e000 r–p 0000d000 08:01 1311132 /home/server/Projects/email/emailQueue.app 0060e000-0060f000 rw-p 0000e000 08:01 1311132 /home/server/Projects/email/emailQueue.app 01c40000-01c82000 rw-p 00000000 00:00 0 [heap] […]

如何在gcc中启用C ++ 11?

我在Mac OSX Mountain Lion上使用http://hpc.sourceforge.net上的gcc 4.8.1。 我想编译一个C ++程序,它使用<string>的to_string函数。 我需要每次使用flag -std=c++11 : g++ -std=c++11 -o testcode1 code1.cpp 有没有办法在默认情况下包含这个标志?

>?=运算符是什么意思?

通过这个C ++ BigInt库查找并findBigInt.cpp文件。 顶部有一个关于兼容性的评论: 这个类是为g ++编译器编写的,使用了一些g ++扩展(比如“long double”和“>?=”运算符)。 那是什么>?=操作员呢? 我找不到其他地方的参考。