Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:类型转换运算符重载-Visual studio 2013内部错误_C++_Visual Studio 2013_Typecasting Operator - Fatal编程技术网

C++ C++;:类型转换运算符重载-Visual studio 2013内部错误

C++ C++;:类型转换运算符重载-Visual studio 2013内部错误,c++,visual-studio-2013,typecasting-operator,C++,Visual Studio 2013,Typecasting Operator,我重载了类型转换操作符,Visual Studio 2013中出现了内部错误 这是exponent类的标题: #pragma once #include "Calc.h" #include <iostream> using namespace std; class Exponent { private: int base; int exponent; public: Exponent(); Exponent(int a) {

我重载了类型转换操作符,Visual Studio 2013中出现了内部错误

这是exponent类的标题:

#pragma once
#include "Calc.h"
#include <iostream>

using namespace std;


class Exponent
{

private:
    int base;
    int exponent;
public:
    Exponent();
    Exponent(int a)
    {
        base = a;
    }

    int getBase()
    {
        return base;
    }


};

void printExp(Exponent e)
{
    cout << e.getBase() << endl;
}
以下是主要功能:

#pragma once
#include "Exponent.h"

class Calc
{
private:
    int acc;
public:
    Calc();
    Calc(int a);

    operator Exponent()  //this is where I get an error. 
    { 
        return Exponent(acc); 
    }


};
#include "stdafx.h"
#include <iostream>
#include "Exponent.h"
#include "Calc.h" 

using namespace std;

int main()
{
    Calc c(6);

    printExp(c);
    return 0;
}
这在某种程度上导致Visual Studio崩溃,显示如下错误:

Microsoft(R) C\C++ Optimizing compiler has stopped working...

内部编译器错误(ICE)是一个编译器错误——一个运行良好的编译器应该总是报告错误代码的合理错误。我建议您在connect.microsoft.com上提交错误报告

但是,您的代码确实存在一个明显的问题:两个头文件之间存在循环依赖关系。指数.h包括Calc.h,Calc.h又包括指数.h。即使编译器没有因ICE崩溃,它仍然会报告此代码的错误(可能是“未定义符号”类型)


这种情况有一个简单的修复方法,因为Exponent.h实际上对Calc.h没有任何依赖关系,您只需从Exponent.h中删除
#include“Calc.h”
行,循环依赖关系就会消失。

内部编译器错误(ICE)是一个编译器错误——一个运行良好的编译器应该总是报告错误代码的合理错误。我建议您在connect.microsoft.com上提交错误报告

但是,您的代码确实存在一个明显的问题:两个头文件之间存在循环依赖关系。指数.h包括Calc.h,Calc.h又包括指数.h。即使编译器没有因ICE崩溃,它仍然会报告此代码的错误(可能是“未定义符号”类型)


对于这种情况有一个简单的修复方法,因为Exponent.h实际上对Calc.h没有任何依赖关系,您只需从Exponent.h中删除
#include“Calc.h”
行,循环依赖关系就会消失。

此代码在Visual Studio“14”CTP中不再崩溃


它不会编译,因为您在Exponent.h中包含了Calc.h,这意味着编译器在看到类Exponent之前先看到类Calc,所以您尝试将转换运算符定义为编译器尚不知道存在的类型。

此代码在Visual Studio“14”CTP中不再崩溃


它不会编译,因为您在Exponent.h中包含了Calc.h,这意味着编译器在看到类Exponent之前看到了类Calc,所以您试图将转换运算符定义为编译器尚不知道存在的类型。

好吧,这显然是一个编译器错误……也就是说,
printExp
应该是
inline
,因为您是在头中定义它的。编译器崩溃总是一个编译器错误,但是您是否真的在某处定义了
Exponent
Calc
构造函数?@Praetorian是的,我对Calc类和Exponent类有单独的cpp文件。它们的主体是空的,所以我认为在这里发布它是没有用的。另一个明显的问题是
在标题中使用名称空间std
。这显然是一个编译器错误……也就是说,
printExp
应该是
inline
,因为您在标题中定义它。编译器崩溃总是一个编译器错误,但是你真的在某处定义了
指数
计算
构造函数吗?@Praetorian是的,我有计算类和指数类的单独cpp文件。他们的主体是空的,所以我认为在这里发布这些内容是没有用的。另一个明显的问题是
在标题中使用namespace std
Microsoft(R) C\C++ Optimizing compiler has stopped working...