声明名为'this'的参数时出现语法错误

时间:2013-03-07 07:16:59

标签: c++ compiler-errors this

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:'{':缺少函数头(旧式正式列表?)

我正在寻找这些错误的来源。

2 个答案:

答案 0 :(得分:6)

thisC++ 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 ++编译器。