Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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++ 在Visual Studio C++;6_C++_Visual Studio_Templates - Fatal编程技术网

C++ 在Visual Studio C++;6

C++ 在Visual Studio C++;6,c++,visual-studio,templates,C++,Visual Studio,Templates,0亲爱的StackExchange社区: 我花了两个小时试图找出问题的根源,但完全失败了。研究=谷歌搜索也没有提供任何可行的解决方案。至少我能够发现,在VS6.0下,不能在头文件和.cpp文件之间分割模板函数的声明和实现 也许我的方法本身就有缺陷,或者是VS6.0这次特别令人讨厌 这是我编写的测试代码 #include "stdafx.h" #include <string> #include <iostream> class TestClass{ public:

0亲爱的StackExchange社区:

我花了两个小时试图找出问题的根源,但完全失败了。研究=谷歌搜索也没有提供任何可行的解决方案。至少我能够发现,在VS6.0下,不能在头文件和.cpp文件之间分割模板函数的声明和实现

也许我的方法本身就有缺陷,或者是VS6.0这次特别令人讨厌

这是我编写的测试代码

#include "stdafx.h"
#include <string>
#include <iostream>

class TestClass{

  public:
     template<class T> inline bool isNull(T& inObject){
        return 0;   // edited because of the answer by Joachim Pileborg  :)
                // initial code was: return (inObject != NULL) ? 0:1; 
  }

};

using namespace std;

int main(int argc, char* argv[])
{
    cout<<TestClass::isNull<string>("test");
    return 0;
}
#包括“stdafx.h”
#包括
#包括
类TestClass{
公众:
模板内联bool为空(T&inObject){
返回0;//由于Joachim Pileborg的答案而编辑:)
//初始代码为:return(inoobject!=NULL)?0:1;
}
};
使用名称空间std;
int main(int argc,char*argv[])
{

cout除非定义一个返回指针的自定义强制转换运算符,否则对象实例永远不能等于
NULL

除非定义一个返回指针的自定义强制转换运算符,否则对象实例永远不能等于
NULL

,除了注释和答案中指出的事实之外,内部编译器错误在这种情况下,当编译器中出现错误时,会阻止它编译有效代码


Microsoft通常在IDE热修复程序或较新版本的编译器中修复这些错误。尝试修改代码结构,使其执行相同的操作,但外观不同-这是避免内部错误问题的唯一方法。

除了注释和答案中指出的事实外,在出现错误的情况下会发生内部编译器错误编译器中有一个bug,它阻止编译器编译有效代码


Microsoft通常会在IDE修补程序或较新版本的编译器中修复这些错误。请尝试修改代码结构,使其执行相同的操作,但外观不同-这是避免内部错误问题的唯一方法。

您的代码中有几个问题:

我是这样改写的:

  • 比较您正在传递的引用的地址(您已经编辑了问题,但是您在函数体中编写了
    inoobject==NULL
    ,并且它也无法编译)
  • 使用常量字符串&so必须能够调用
    TestClass::isNull(“test”);
  • 如果要以这种方式调用函数,必须将函数定义为静态函数
  • 我不确定,但是这个角色

    #包括
    #包括
    类TestClass{
    公众:
    样板
    静态布尔值为空(常量T&inObject)
    {
    返回(&inObject==NULL)?true:false;
    }
    };
    使用名称空间std;
    int main(int argc,char*argv[])
    {
    
    cout您的代码中有几个问题:

    我是这样改写的:

    • 比较您正在传递的引用的地址(您已经编辑了问题,但是您在函数体中编写了
      inoobject==NULL
      ,并且它也无法编译)
    • 使用常量字符串&so必须能够调用
      TestClass::isNull(“test”);
    • 如果要以这种方式调用函数,必须将函数定义为静态函数
    • 我不确定,但是这个角色

      #包括
      #包括
      类TestClass{
      公众:
      样板
      静态布尔值为空(常量T&inObject)
      {
      返回(&inObject==NULL)?true:false;
      }
      };
      使用名称空间std;
      int main(int argc,char*argv[])
      {
      
      为什么可以使用三元运算符?只需使用返回比较结果,因为它已经是布尔值。VC++6.0对模板的支持非常缺乏。您可以尝试1)通过显式构造参数来帮助编译器,而不是依赖转换
      cout 2)不显式指定模板参数
      cout,以及模板应该将其参数设置为
      常量T&
      ,因为您要将临时变量传递给模板。“我知道visual studio 6.0已经很旧了,但我不得不在工作中使用它”–辞职。恐怕这是我能给你的最具建设性的建议。如果你的公司不关心为你提供足够的工具,他们是个糟糕的雇主。为什么要使用三元运算符?只需使用返回比较结果,因为它已经是布尔值。VC++6.0对模板的支持非常缺乏。你可以试试1) 通过显式构造参数来帮助编译器,而不是依赖于转换
      cout 2)不显式指定模板参数
      cout,模板应将其参数作为
      const T&
      ,因为您正在向其传递临时变量。“我知道visual studio 6.0已经很旧了,但我不得不在工作中使用它”–辞职。恐怕这是我能给你的最有建设性的建议。如果你的公司不关心为你提供足够的工具,他们就是一个糟糕的雇主。okey id不知道,谢谢-但我一直更新我的代码,只返回0,它仍然抛出相同的错误:(AndreyLujankin)我想现在是时候考虑更新Visual Studio了。6版是很古老的,包含了很多不固定的bug。OKI我会尝试向IT部门恳求……我不认为他们会听。我是C++中唯一的人,所以他们不会很有动机去迎合我的需求。谢谢-我仍然更新了我的代码,一直只返回0,它仍然抛出相同的错误:(AndreyLujankin,我想现在是时候考虑更新Visual Studio了。6版是很古老的,包含了一些不固定的bug。OKI我会尝试向IT部门恳求……我不认为他们会听。我是C++中唯一的人,所以他们不会很有动力来满足我的需要。谢谢:-我试着运行你的代码,但我仍然有同样的错误。VS 3.0确实是个问题。你尝试过VS C++ 6吗?
      #include <string>
      #include <iostream>
      
      class TestClass{
      
        public:
          template<typename T> 
          static bool isNull(const T& inObject)
           {
              return (&inObject == NULL) ? true : false;
          }
      
      };
      
      using namespace std;
      
      int main(int argc, char* argv[])
      {
          cout<< TestClass::isNull<string>("test");
          return 0;
      }