#include <iostream>
using namespace std;
class T1
{
const int t = 100;
public:
T1()
{
cout << "T1 constructor: " << t << endl;
}
};
Run Code Online (Sandbox Code Playgroud)
当我尝试t用100. 初始化const成员变量时,但是它给了我以下错误:
test.cpp:21: error: ISO C++ forbids initialization of member ‘t’
test.cpp:21: error: making ‘t’ static
Run Code Online (Sandbox Code Playgroud)
如何初始化const值?
我有一个有内联成员的类,但后来我决定从头中删除实现,所以我将函数的成员体移到cpp文件中.起初我刚刚在头文件中留下了内联签名(草率我),程序无法正确链接.然后我修好了标题,当然一切正常.
但是不是内联完全可选吗?
在代码中:
第一:
//Class.h
class MyClass
{
void inline foo()
{}
};
Run Code Online (Sandbox Code Playgroud)
接下来改为(不会链接):
//Class.h
class MyClass
{
void inline foo();
};
//Class.cpp
void MyClass::foo()
{}
Run Code Online (Sandbox Code Playgroud)
然后(将工作正常):
//Class.h
class MyClass
{
void foo();
};
//Class.cpp
void MyClass::foo()
{}
Run Code Online (Sandbox Code Playgroud)
我认为内联是可选的,想象我可能会因为我的邋iness警告,但没想到链接错误.在这种情况下编译器应该做的正确/标准的事情是什么,我是否应该根据标准得到我的错误?
在C++(03)类中,我有一个成员变量,在对象构造期间必须为其赋值.但是,只有派生类才能计算所需的值.正如本文所讨论的,C++是否要求您从派生类初始化基类成员?,我知道派生类不能初始化基类成员,但是赋值对我来说已经足够了.
因此,我在基类中提供了一个赋值的方法,但我无法弄清楚如何强制派生类调用它.以下示例代码说明了这一点.
class Base {
public:
Base() {}
setFoo(unsigned inFoo) { foo = inFoo; }
private:
unsigned foo;
};
class Derived : public Base {
Derived() : Base() {
unsigned desired = ... // do calculations to get the desired value
setFoo(desired); // --> how to ensure that derived class calls this?
}
};
Run Code Online (Sandbox Code Playgroud)
在foo随后其他几个基类的方法使用.即使我在其中设置了"标志" setFoo(),也没有"后构造函数"方法,我可以检查它.在基类中还有其他几种方法foo可供使用.我可以在那里检查它,但它太繁琐,容易出错并且效率低下.
如果以前曾经问过我,我很抱歉.在尝试通过搜索"确保派生类构造函数必须调用特定基类方法"和"强制派生类来分配基类成员"之前,我确实尝试在此处找到它.我遇到了一些有用的帖子如何在C++的派生类'构造函数中初始化基类的const变量?并强制派生类使用基类的构造函数,但遗憾的是它们没有解决我的问题.
你能否建议我采取适当的方法来解决这种情况?编译时检查解决方案是可取的,但如果不可行,运行时检查也会有所帮助.虽然我不能将C++ 11用于我的问题,但我也很乐意学习任何C++ 11解决方案.谢谢你的考虑.
编辑当然,将此作为一项要求进行记录也是一种选择,但我想了解是否有程序化解决方案.
Edit2 …