C++ C++;静态_cast中的编译错误<&燃气轮机;

C++ C++;静态_cast中的编译错误<&燃气轮机;,c++,compiler-errors,static-cast,C++,Compiler Errors,Static Cast,下面是我的代码 Class A { A::A(int num) { } int num; }; class B : public A { B::B(int num):A(num) { } }; Class D; Class C { void getNum(A**& somenum) {} D *dObj; }; void C::getNum(A**& somenum) { dObj->getNumber(static_cast<B**&g

下面是我的代码

Class A
{
  A::A(int num) { }
  int num;
};

class B : public A
{
  B::B(int num):A(num) { }
};

Class D;
Class C
{
  void getNum(A**& somenum) {}
  D *dObj;
};

void C::getNum(A**& somenum)
{
  dObj->getNumber(static_cast<B**>(somenum)); // Error here.
}

Class D
{
  void getNumber(B**& number) 
  { 
      B someValue[5];
      // all the objects in the array are properly created and properly Initalized (skipped that part)

      number[0] = someValue[0]; 
      number[1] = someValue[1];
      //...
   }
};
A类
{
A::A(int num){}
int-num;
};
B类:公共A
{
B::B(int num):A(num){
};
D类;
C类
{
void getNum(A**&somenum){}
D*dObj;
};
void C::getNum(A**&somenum)
{
dObj->getNumber(static_cast(somenum));//此处出错。
}
D类
{
作废编号(B**&编号)
{ 
B某些值[5];
//数组中的所有对象都已正确创建和初始化(跳过该部分)
数字[0]=someValue[0];
数字[1]=someValue[1];
//...
}
};
我在进行静态转换时遇到编译错误。我试图将“someValue”数组中的值分配给“A**&somenum”。你能帮我怎么做吗

事先非常感谢

void C::getNum(A**&somenum)
void C::getNum(A**& somenum)
{
  dObj->getNumber(static_cast<B**>(somenum)); // Error here.
}
{ dObj->getNumber(static_cast(somenum));//此处出错。 }
static_cast
用于在指向相关类的指针之间执行转换,或执行任何其他也可以隐式执行的非指针转换。在上面的例子中,情况并非如此。这就是为什么这里不能使用
static\u cast

void C::getNum(A**&somenum)
{
dObj->getNumber(static_cast(somenum));//此处出错。
}

static_cast
用于在指向相关类的指针之间执行转换,或执行任何其他也可以隐式执行的非指针转换。在上面的例子中,情况并非如此。因此,<>代码> StasyType Case<代码>不能使用。

< P>因为C++支持多重继承(和其他特征),所以<代码> A*<代码>可转换为<代码> B*<代码>,但不一定与<代码> B*<代码>相同。在指针类型之间转换可能会将指针值移动若干字节

因此,不可能将
a**
转换为
B**
,反之亦然。从外部指针检索值后,需要进行从基到派生的转换


多重间接寻址通常是个坏主意。很难知道什么样的数据结构可能会有所帮助,但回顾一下标准库容器可能会有深刻的见解。无论如何,谢谢你浓缩了这个很好的独立示例

> P>因为C++支持多重继承(和其他特征),所以<代码> A*<代码>可转换为<代码> B*<代码>,但不一定与<代码> B*<代码>相同。在指针类型之间转换可能会将指针值移动若干字节

因此,不可能将
a**
转换为
B**
,反之亦然。从外部指针检索值后,需要进行从基到派生的转换


多重间接寻址通常是个坏主意。很难知道什么样的数据结构可能会有所帮助,但回顾一下标准库容器可能会有深刻的见解。无论如何,谢谢你浓缩了这个很好的独立示例

您的编译器在这里做的事情是正确的。简言之如果基类指针和派生类指针指向同一对象,则可以在它们之间进行转换。但是基数组和派生数组不是一回事

好消息是你想做的事情比你想象的要容易。派生类指针已隐式转换为基类指针而无需强制转换。假设您知道两个阵列的大小,并且大小相同,则这是一个简单的循环:

// Given:
A** someNumbers;
B** someValues;

for (int i = 0; i < size; ++i) {
    *someNumbers[i] = *someValues[i];
}
//给定:
A**一些数字;
B.价值观;
对于(int i=0;i

还有,这类问题就是为什么我们有像这样的标准容器。一些非常聪明的人已经为你解决了这个指针疯狂的问题。我强烈建议利用它。它会让你的C++体验更好。

你的编译器在这里做的是正确的。简言之如果基类指针和派生类指针指向同一对象,则可以在它们之间进行转换。但是基数组和派生数组不是一回事

好消息是你想做的事情比你想象的要容易。派生类指针已隐式转换为基类指针而无需强制转换。假设您知道两个阵列的大小,并且大小相同,则这是一个简单的循环:

// Given:
A** someNumbers;
B** someValues;

for (int i = 0; i < size; ++i) {
    *someNumbers[i] = *someValues[i];
}
//给定:
A**一些数字;
B.价值观;
对于(int i=0;i

还有,这类问题就是为什么我们有像这样的标准容器。一些非常聪明的人已经为你解决了这个指针疯狂的问题。我强烈建议利用它。它会让你的C++体验更好。

为什么你需要指针来引用指针?你能告诉我正确的方法吗?我寻找解决办法,尝试了许多其他方法,但都失败了(作为最后手段,我在这里发布了这个问题:(:)在
B**&number
中,number是指向B类指针的
B**
的参考变量。“您能帮助我如何转换“somenum”以便为其分配“someValue”吗?”选角根本就是一件错误的事情。事实上,从“如何选角…”开始的90%以上的问题都是错误的问题。告诉我们你想做什么(只是要清楚,选角不是你想做的),您可能会得到一些实际的帮助。someValue的类型是什么?为什么您需要指向通过引用传递的指针的指针?请您发布正确的方法。我搜索了解决方案并尝试了许多其他方法,但都失败了。:(作为最后的手段,我在此处发布了问题。::(在
B**&number
中,number是指向B类指针的
B**
指针的参考变量。“您能帮助我们如何转换“somenum”以便将“someValue”分配给