我对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" - 是吗?谷歌在这里没有多大帮助 - 它只找到通常的双冒号(目标::)这是不同的东西!
有什么建议?谢谢!
可能有点懦弱的问题:我有两个类,并声明所有变量公开.为什么我不能从派生类访问变量?
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) 我的问题非常接近这个问题: 你如何声明一个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声明警告的缺失?这是编译器自动删除文件不必要部分的能力吗?