小编081*_*ZED的帖子

GNU制作双重冒号

我对gmake语法的理解有点问题:

OBJ = foo.o bar.o

$(OBJ): %.o: %.cpp
    $(CC) -c -MMD -MP $(INCLUDES) $(CFLAGS) $< -o $@
    @sed (...create empty targets in file...)
Run Code Online (Sandbox Code Playgroud)

我不确定是什么$(...):%.o:%.cpp呢!?

我认为它可能会在正确的%.cpp依赖项中翻译"%.o:%.cpp" - 是吗?谷歌在这里没有多大帮助 - 它只找到通常的双冒号(目标::)这是不同的东西!

有什么建议?谢谢!

c++ gnu makefile

4
推荐指数
1
解决办法
512
查看次数

访问基类的公共成员失败

可能有点懦弱的问题:我有两个类,并声明所有变量公开.为什么我不能从派生类访问变量?

g ++告诉我:vec3d.h:76:3:错误:'val'未在此范围内声明

template<typename TYPE>
class vec{
public:
        TYPE *val;
        int dimension;
public:
        vec();
        vec( TYPE right );
        vec( TYPE right, int _dimension );

[etc]


template<typename TYPE>
class vec3d : public vec<TYPE>{
public:
        vec3d() : vec<TYPE>( 0, 3 ){};
        vec3d( TYPE right ) : vec<TYPE>( right, 3 ){};
        vec3d( TYPE X_val, TYPE Y_val, TYPE Z_val ) : vec<TYPE>( 0, 3 ){
                val[0] = X_val; //// <----------THIS ONE FAILS!
                val[1] = Y_val;
                val[2] = Z_val;
        };
[etc]
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates members

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

static const函数指针C.

我的问题非常接近这个问题: 你如何声明一个const数组的函数指针?

我成功地在我的包含文件中创建了静态const函数指针数组.

void fun1( void* );
void fun2( void* );
typedef void ( *funPointer )( void* );
funPointer myFunPointer[2] = { &fun1, &fun2 };
Run Code Online (Sandbox Code Playgroud)

现在我发现了以下内容:我的编译器(gcc 4.6.3)抱怨我

(1)编译包含此头文件的不同*.o文件,然后将它们链接在一起(多重定义) - 它有助于在数组的声明中使用static关键字(编辑:实际上函数必须声明为static).

(2)编译包含头部的文件,而不是设置数组const.(myFunPointer声明但未使用)

static const myFunPointer[2] ....
Run Code Online (Sandbox Code Playgroud)

抓住错误/警告.

现在的问题是:我可以解释前一种行为,因为静态使用"预定义"的内存地址,并且函数的几个声明将在地址处合并.这个解释是否正确?如何解释const声明警告的缺失?这是编译器自动删除文件不必要部分的能力吗?

c arrays function-pointers

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

标签 统计

c++ ×2

arrays ×1

c ×1

function-pointers ×1

gnu ×1

inheritance ×1

makefile ×1

members ×1

templates ×1