相关疑难解决方法(0)

如何在类中初始化const成员变量?

#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值?

c++ const

97
推荐指数
6
解决办法
25万
查看次数

C++的内联是不是完全可选的?

我有一个有内联成员的类,但后来我决定从头中删除实现,所以我将函数的成员体移到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++ inline

20
推荐指数
3
解决办法
2455
查看次数

将函数声明为"内联"的好处?

每当我读到C中的"内联"声明时,都会提到它只是对编译器的一个提示(即它不必遵守它).那么添加它有什么好处,还是我应该依赖编译器比我更了解?

c inline declaration function

6
推荐指数
2
解决办法
2461
查看次数

确保派生类构造函数必须调用特定的基类方法

在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 …

c++ inheritance c++03

3
推荐指数
1
解决办法
1915
查看次数

标签 统计

c++ ×3

inline ×2

c ×1

c++03 ×1

const ×1

declaration ×1

function ×1

inheritance ×1