typedef struct {
index_tree_node node;
uint32_t number;
lzma_vli block_number_base;
index_tree groups;
lzma_vli record_count;
lzma_vli index_list_size;
lzma_stream_flags stream_flags;
lzma_vli stream_padding;
} index_stream;
以下是功能:
static void
index_cat_helper(const index_cat_info *info, index_stream *this) //problem line
{
index_stream *left = (index_stream *)(this->node.left);
index_stream *right = (index_stream *)(this->node.right);
if (left != NULL)
index_cat_helper(info, left);
this->node.uncompressed_base += info->uncompressed_size;
this->node.compressed_base += info->file_size;
this->number += info->stream_number_add;
this->block_number_base += info->block_number_add;
index_tree_append(info->streams, &this->node);
if (right != NULL)
index_cat_helper(info, right);
return;
}
错误:
错误C2143:语法错误:在'this'之前缺少')'
错误C2447:'{':缺少函数头(旧式正式列表?)
我正在寻找这些错误的来源。
答案 0 :(得分:6)
this
是C++ keyword,您不能将其用作变量的名称。它表示指向该实例中的类的实例的指针。
示例(虽然这里实际上可以省略this
)
struct Foo
{
void foo() const { this->bar(); }
void bar() const {}
void step() { this->counter++; }
int counter = 0; // don't worry, C++11 initialization
};
您需要一个不同的名字。
答案 1 :(得分:1)
您正在尝试将看似C代码的内容编译为C ++。请注意,这会引入问题,因为C和C ++是不同的语言(例如,您必须转换malloc
的返回结果,这在C代码中是不允许的。)
正确的做法是使用C编译器,而不是C ++编译器。