在Visual Studio c++ 6.0中使用模板函数
Using template functions in Visual Studio C++ 6.0
亲爱的StackExchange社区,
我花了两个小时试图找到问题的根源,但完全失败了。研究=谷歌搜索也没有提供任何可行的解决方案。至少我能够发现,在VS 6.0下,不能将模板函数的声明和实现拆分为头文件和。pcp -file。也许我的方法本身就有缺陷,或者是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;
}
运行此代码会导致以下错误:
致命错误C1001: inner COMPILER- FEHLER(编译器文件"msc1.cpp",行1794)
有人知道我在这里做错了什么吗?
注:这次我真的很努力地尽可能准确地提出这个问题,并提供一个具体的例子。如果还有什么需要补充的,请告诉我。
p。SS:我知道visual studio 6.0很老了,但我不得不在工作中使用它。使用新的编译器(在家里)运行相同的代码不会导致任何错误。这就是为什么我认为这个问题主要是由VS 6.0的突发奇想引起的。
提前感谢您的帮助!!JD
除非你定义一个返回指针的自定义强制转换操作符,否则对象实例永远不可能等于NULL
。
除了在注释和回答中指出的事实外,内部编译器错误发生在编译器中存在错误,导致其无法编译有效代码的情况下。
微软通常在IDE热修复程序或新版本的编译器中修复这些错误。尝试修改代码的结构,使其做同样的事情,但看起来不同-这是避免内部错误问题的唯一方法。
您的代码中有几个问题:
我这样重写:
- 比较你传递的引用的地址(你已经编辑了你的问题,但是你在函数体中写了
inObject==NULL
,它也无法编译) - using const string&所以必须能够调用
TestClass::isNull<string>("test");
- 你必须定义你的函数为静态如果你想调用它的方式
- 我不确定,但是你的单词模板后面的字符'<'在我的IDE中看起来很糟糕,所以我用一个普通的
<
代替了它,它编译得更好 这是一种编码方式,但在定义模板时更喜欢使用typename而不是class - 更喜欢使用
true
和false
而不是1
和0
(您编辑了您的问题,但您仍然返回0…)
=>
#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;
}
现在可以正常编译了
相关文章:
- Visual Studio中的函数声明和函数定义问题
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- Visual c ++,使用字符串引用/指针调用 dll 函数
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 带有自动参数的函数使用 GCC 编译,但不使用 Visual C++ 编译
- Visual Studio 中的 sqrtf 函数替代
- 我可以在Visual Studio 2019上的项目下使用多个主函数吗?
- Visual Studio 无法解决类和命名空间中重载的明确函数
- 如何使用Visual Studio 2008将字符串映射到函数?
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- 请参阅在 Visual Studio 2019 中捕获 std::exception 时对函数模板实例化消息的引用
- 如何在 Visual C++ 中从返回类型为 map 的函数返回 null?
- 无法在clang Linux中分配非静态成员函数,但我可以在Visual Studio Windows中分配
- 从 DLL 导出 ASM 函数 - Visual Studio C++
- 默认移动构造函数 Visual Studio 2015
- 定义类编译错误的函数(Visual Studio)
- 调试构建中的内联函数(Visual C++2008)
- RValue,模板解析和复制构造函数(Visual c++ 2010)
- c++中未解析的外部函数:Visual c++对方法签名的修改与dll中修改的方法不同