我尝试了,所以它让我思考为什么不重载这个函数,我想出了一个稍微不同的代码,但它说这个函数不能重载。我的问题是为什么?还是有别的办法?
#include <iostream>
using std::cout;
class Test {
public:
Test(){ }
int foo (const int) const;
int foo (int );
};
int main ()
{
Test obj;
Test const obj1;
i
我有以下代码:
class A : public B {
public:
_container (B* b) {
container_ = b;
}
private:
B* container_;
};
void foo(const A& a, const B& b) {
A new_a (a);
new_a._container(&b);
}
如果我尝试使用icpc12编译它,我会得到:-
error: no instance of overloaded function "A::_container
我正在尝试用它的构造函数初始化我的类ShadeRec的一个实例:
ShadeRec(World& world);
所以我传递给它:
ShadeRec sr(*this);
其中"this“是类World的实例。
我得到以下错误:
World.cpp: In member function ‘ShadeRec World::hitObjects(const Ray&) const’:
World.cpp:52: error: no matching function for call to ‘ShadeRec::ShadeRec(const World&)’
Sh
我从许多其他堆栈溢出线程(如)中了解到,模板参数是在编译时计算的。此外,非类型模板参数应该是一个常量表达式、积分表达式或指向具有外部链接的对象的指针。
而且,我在Makefile中的g++命令中没有使用--std=c++0x。
那么,是否可以实例化作为参数传递为NULL的模板类?
// I have a template class like this -
template<class T, T invalidVal, int e> class A
{
static inline bool dummy(T value)
{
return 0;
我在编译我的代码时遇到了一些问题--这与我传入的类型有关。下面是编译器所说的:
R3Mesh.cpp: In copy constructor 'R3Mesh::R3Mesh(const R3Mesh&)':
R3Mesh.cpp:79: error: no matching function for call to 'R3Mesh::CreateHalfEdge(R3MeshVertex*&, R3MeshFace*&, R3MeshHalfEdge*&, R3MeshHalfEdge*&)'
R3Mesh.h:178:
我正在阅读C++ Primer,我发现了一些非常奇怪和难以理解的东西:
Record lookup(Account&); //Record and Account are two unrelated class
Record lookup(const Account&);
因此,这两个函数都接受非const对象(首先匹配非const参数函数),但只有第二个函数可以接受const对象。
从下一节(const_cast和重载)开始,我有以下代码:
const string &shorterString(const string &s1, const string
假设我有一个函数,它接受对指针的常量引用...
示例:
void Foo( const Bar *&p_Thing, );
然后我传递一个指针
Bar *blah = NULL; // Initialized when program starts up
添加到函数
Foo( blah );
我可能会遇到这样的编译器错误
invalid initialization of reference of type 'const Bar*&' from expression of type 'Bar*'
这在我身上已经发生过几次了,我真的想弄清楚cons
我有一个很大的库,它实现了一些不可变的数据结构。正如您可以想象的那样,其中的几乎所有内容都是const限定的。有一些选择部分不是常量,例如引用计数器。为了处理嵌入在以独占方式通过const方法和指针访问的结构中的引用计数器,使用mutable关键字。下面是Node中的示例。这工作得很好,我在阅读文档时说这很好。
我面临的问题是,我也想使用Boost.Intrusive容器来跟踪数据结构的某些部分,但这些容器没有const方法。
boost::intrusive::list my_bi_list; // as an example
struct Node {
mutable boost::
为什么这段代码要编译(至少在MSVC和Clang上)?我希望我不能改变常量对象上的任何东西,但是它看起来像是包含的,引用的对象是不是包含在其中的非常量对象?
class SomeObject {
public:
int x;
};
class ContainerA {
public:
SomeObject& s;
int x;
public:
ContainerA(SomeObject& s): s(s) {}
};
class ContainerB {
public:
ContainerB(ContainerA const& a
以下程序编译:
template <const int * P>
class Test{};
extern const int var = 42; //extern needed to force external linkage
int main()
{
Test<&var> test;
}
然而,这一次却没有,这对我来说是个惊喜:
template <const int * P>
class Test{};
extern const int var = 42; //extern needed to force external li
在C++中,如果我定义了一个复制构造函数和operator=来引用该类的非常量,编译器是否应该仍然提供常量引用的默认版本?
struct Test {
Test(Test &rhs);
Test &operator=(Test &rhs);
private:
// Do I still need to declare these to avoid automatic definitions?
Test(const Test &rhs);
Test &operator=(const Test &rhs);
};
下面的片段演示了我的问题:(编译错误,关于GCC)
stringstream ss;
string s;
ss << "Hello";
// This fails:
// s.swap(ss.str());
// This works:
ss.str().swap(s);
我的错误:
constSwap.cc:14: error: no matching function for call to 'std::basic_string<char, std::char_traits<char>, std::allocator<char
为什么会发生错误,我认为const auto data_0应该和const Data一样* data_1,data_0和data_1有什么不同?
class Data {
public:
Data(int val_) : val(val_) {
}
~Data() {
}
void SetVal(int val_) {
val = val_;
}
private:
int val;
};
Data* GetData(int val) {
return new Data(val);
}
int main () {
const auto data_0
这是的后续
事情变得非常复杂,所以我开始了一个新的帖子,以使我的观点更清晰。(我不想删除以前的帖子,因为其他给出有价值反馈的人不会失去他们获得的名誉点)
更新代码:(编译并运行)
#include <iostream>
using std::cout;
class Test {
public:
Test(){ }
int foo (const int) const;
int foo (int );
};
int main ()
{
Test obj;