操作符函数和与之相关的编译错误

operator function in C++ and compile error relating to it

本文关键字:编译 错误 函数 操作符      更新时间:2023-10-16

对于这个问题,我可能有几种方式来暴露我的无知:)

首先,我认为这是c++代码,但文件的扩展名是。C(所以可能是C?)

无论如何,我正在尝试编译一个名为Sundance(句子理解和概念提取)的程序,这是一个自然语言处理工具。我得到的编译错误与以下内容有关:
// This class is used internally to keep track of constituents that are
// potential subjects for clauses during clause handling.
class PotentialXP {
public:
  Constituent* XPPtr;
  unsigned int Distance;
  unsigned int ClauseIndex;
  unsigned int ConstIndex;
  PotentialXP() {
    XPPtr         = 0;
    Distance      = 0;
    ClauseIndex   = 0;
    ConstIndex    = 0;
  };
  operator int() const {
    return (int)XPPtr;  
  };
  void Set(Constituent* w,
           unsigned int x,
           unsigned int y,
       unsigned int z){
    XPPtr         = w;
    Distance      = x;
    ClauseIndex   = y;
    ConstIndex    = z;
  };
};

错误是"从' Constituent* const* '转换为' int '失去精度"

与以下行相关:

operator int() const {
  return (int)XPPtr;    
};

我明白为什么我得到一个错误。XPPtr的类型是Constituent*,那么如何将其转换为整数呢?有人知道这段代码的作者想要做什么吗?我该如何重写这行代码以使其能够编译?操作符函数(如果你这样称呼它的话)是用来干什么的?

任何建议都非常感谢!

对我来说编译得很好。您在64位计算机上,其中size_t大于int

说明:历史上可以将指针转换为int

struct Foo {};
int main ()
{
    Foo * f = new Foo ();
    std :: cout << (int)f; // Prints 43252435 or whatever
}

如果您需要一个与指针大小相同的整数,请使用size_tssize_t

你到底为什么要这样写operator int() ?你想要operator bool()测试效度吗?在这种情况下,return NULL != XPPtr的函数体将是更好的样式——至少更清晰。

operator int() const行说明了如何将对象强制转换为int

Constituent*可以强制转换为int类型,因为这两种类型通常是相同的大小。我不认为这是程序员想要的,因为原始指针值没有语义用途。也许应该有一个字段查找?例句:

operator int() const {
  return (int)XPPtr->somevalue;    
};