2011-08-05 41 views
0

我在C++代码中遇到了一个有线问题。我使用TCLAP软件接受命令行参数,其中一个标志是一个文件名:在const char *中传入一个方法,但得到char const *错误

TCLAP::ValueArg<string> Poly ("p", "poly", "file name of the polynomial", false, "", "string"); 

我也有一个接受3个参数的另一个功能,

void GetBiPoly(const char *filename, BiPoly<BigFloat> *u, BiPoly<BigFloat> *v); 

我传递保利字符串函数GetBiPoly这样:

benchmark::GetBiPoly(Poly.getValue().c_str(), &fxy, &gxy); 

当我编译程序,它给了我下面的错误:

miranda.cpp:(.text+0x1900): undefined reference to `benchmark::GetBiPoly(char const*, CORE::BiPoly<CORE::BigFloat>*, CORE::BiPoly<CORE::BigFloat>*)' 

看来唯一的区别是错误信息中文件名的类型是char const*,而定义是const char*。任何人都可以告诉我这是什么问题吗?谢谢。

+0

这两种形式是等价的。你的问题是你没有链接到实现,或者它在另一个命名空间。 – pyroscope

回答

1

char const *const char *是完全一样的东西。您的问题与该部分消息无关。你的错误是你在调用函数benchmark::GetBiPoly(),但是链接器在你链接的对象中找不到它。该功能在哪里定义?你在链接吗?它在这个名字空间吗?

+0

你说得对,卡尔,我搞砸了命名空间,感谢你的快速回应:)得到了很好的教训 顺便说一句,char const *和const char *是否相同?对不起,我在C++中更新一些。 –

+0

@da_zhuang:是的,它们是一样的。两者都是一个不是'const'的指针(如果你喜欢,你可以将它存储到一个不同的变量的地址中),指向一个被视为'const'的'char'(你不能用这个指针来修改'char它指向) –