操作符函数和与之相关的编译错误
operator function in C++ and compile error relating to it
对于这个问题,我可能有几种方式来暴露我的无知:)
首先,我认为这是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_t
或ssize_t
。
你到底为什么要这样写operator int()
?你想要operator bool()
测试效度吗?在这种情况下,return NULL != XPPtr
的函数体将是更好的样式——至少更清晰。
operator int() const
行说明了如何将对象强制转换为int
。
Constituent*
可以强制转换为int类型,因为这两种类型通常是相同的大小。我不认为这是程序员想要的,因为原始指针值没有语义用途。也许应该有一个字段查找?例句:
operator int() const {
return (int)XPPtr->somevalue;
};
相关文章:
- std::is_base_of表示ctor编译错误
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- 如何修复sfml c++代码编译错误
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- vscode下的Arduino代码出现意外编译错误
- 第三方 API 中的编译错误 - Visual Studio
- std::cout输出int时出现编译错误
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 提升图广度优先搜索前置编译错误
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 我在C++中遇到了这个奇怪的编译错误
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 现代OpenGL和GLEW Libraray的编译错误
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- C ++程序编译错误,找不到/访问文件
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么传递非静态成员函数会导致编译错误?