谁能解释为什么以下代码无法编译?至少在g ++ 4.2.4上.
更有趣的是,为什么它会在我将MEMBER转换为int时进行编译?
#include <vector>
class Foo {
public:
static const int MEMBER = 1;
};
int main(){
vector<int> v;
v.push_back( Foo::MEMBER ); // undefined reference to `Foo::MEMBER'
v.push_back( (int) Foo::MEMBER ); // OK
return 0;
}
Run Code Online (Sandbox Code Playgroud) 如何g++为Fedora Linux 安装?我一直在搜索dnf命令安装,g++但没有找到任何东西.
我该如何安装?
我已经安装好了 gcc
我想在C中编写一个宏,它接受任意数量的参数,而不是特定的数字
例:
#define macro( X ) something_complicated( whatever( X ) )
Run Code Online (Sandbox Code Playgroud)
哪里X有任何数量的参数
我需要这个,因为它whatever是重载的,可以用2或4个参数调用.
我试过两次定义宏,但第二个定义覆盖了第一个!
我正在使用的编译器是g ++(更具体地说,mingw)
我正在开发一个项目,它将读取特定种类的编译器错误消息并对它们执行有用的操作.我正在测试这个示例代码库(一个随机的开源应用程序),因此经常重建,包含一些产生警告的位,这对我来说是不感兴趣的.
如何禁用GCC的所有警告,所以我可以看到错误消息,如果有的话?
快速提问:什么是编译器标志,允许g ++生成自身的多个实例,以便更快地编译大型项目(例如,一次为多核CPU提供4个源文件)?
非常感谢.
我正在运行32位版本的Ubuntu 10.10并尝试交叉编译为64位目标.根据我的研究,我已经安装了g ++ - multilib包.
该程序是一个非常简单的hello世界:
#include <iostream>
int main( int argc, char** argv )
{
std::cout << "hello world" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译:
g++ -m64 main.cpp
Run Code Online (Sandbox Code Playgroud)
错误:
In file included from main.cpp:1:
/usr/include/c++/4.4/iostream:39: fatal error: bits/c++config.h: No such file or directory
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
我发现了一个c++config.h文件,但他们居住下i486-linux-gnu和i686-linux-gnu目录中/usr/include/c++/4.4/没有c++config.h的/usr/include/c++/bits.
关于我失踪的任何想法?没有-m64标志的编译工作正常(创建并正确运行a.out).
编辑感谢来自@nightcracker的提示,我对32位和64位系统上的包含结构进行了一些调查.我在下面添加了一个答案,暂时"修复"了问题,但我认为它会在下次更新时中断.基本上,我错过了一个名为的目录/usr/include/c++/4.4/i686-linux-gnu/64,该目录应包含一个名为bits具有缺失包含文件的子目录.知道什么包应该照顾这个吗?
自从我多年前意识到这一点,默认情况下这不会产生错误(至少在GCC中),我一直想知道为什么?
我知道您可以发出编译器标志来产生警告,但是它不应该总是出错吗?为什么非void函数没有返回值才有效?
评论中要求的示例:
#include <stdio.h>
int stringSize()
{
}
int main()
{
char cstring[5];
printf( "the last char is: %c\n", cstring[stringSize()-1] );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
...编译.
我正在使用GCC 4.3编译我的C++应用程序.而不是手动选择我正在使用的优化标志-march=native,理论上应该添加适用于我正在编译的硬件的所有优化标志.但是我如何检查它实际使用的是哪些标志?
我正在构建一个简单的C++程序,我想暂时用一个系统提供的共享库替换它的更新版本,以进行开发和测试.
我尝试设置LD_LIBRARY_PATH变量,但链接器(ld)失败了:
/ usr/bin/ld:找不到-lyaml-cpp
我希望这可以工作,因为根据ld手册页:
链接器使用以下搜索路径来查找所需的共享库:...对于本机链接器,环境变量"LD_LIBRARY_PATH"的内容...
然后我尝试设置LIBRARY_PATH,这很有效.
根据GCC手册:
LIBRARY_PATH的值是以冒号分隔的目录列表,与PATH非常相似.当配置为本机编译器时,GCC会在搜索特殊链接器文件时尝试这样指定的目录,如果它无法使用GCC_EXEC_PREFIX找到它们.在使用-l选项搜索普通库时,使用GCC链接也会使用这些目录(但首先使用-L指定的目录).
正如(GCC)手册所示,LIBRARY_PATH可行,因为我与GCC链接.
但..
我想尝试一个简单的例子来了解如何使用std::enable_if.在我读完这个答案之后,我认为想出一个简单的例子应该不会太难.我想用来std::enable_if在两个成员函数之间进行选择,并且只允许使用其中一个成员函数.
不幸的是,下面的代码不能用gcc 4.7进行编译,经过数小时和数小时的尝试后我会问你们我的错误是什么.
#include <utility>
#include <iostream>
template< class T >
class Y {
public:
template < typename = typename std::enable_if< true >::type >
T foo() {
return 10;
}
template < typename = typename std::enable_if< false >::type >
T foo() {
return 10;
}
};
int main() {
Y< double > y;
std::cout << y.foo() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
gcc报告以下问题:
% LANG=C make CXXFLAGS="-std=c++0x" enable_if
g++ -std=c++0x enable_if.cpp -o enable_if
enable_if.cpp:12:65: error: `type' in …Run Code Online (Sandbox Code Playgroud)