我在制作一个只有静态方法的字符串实用程序类时遇到了一些麻烦。每当我使用一个调用类在我的字符串实用程序类中使用静态方法时,它会编译一个LNK错误,2019。任何帮助都将非常感激。 .h在下面,
#pragma once
#include <string>
#include "stdafx.h"
#include <iostream>
using namespace std;
static class StringUtil
{
public:
static string Reverse(string);
// bool Palindrome(string);
// string PigLatin(string);
// string ShortHand(string);
private:
// string CleanUp(string);
};
.cpp文件位于下方,
#include "StdAfx.h"
#include "StringUtil.h"
#include <iostream>
static string Reverse(string phrase)
{
string nphrase = "";
for(int i = phrase.length() - 1; i > 0; i--)
{
nphrase += phrase[i];
}
return nphrase;
}
以下是调用类。
#include "stdafx.h"
#include <iostream>
#include "StringUtil.h"
void main()
{
cout << "Reversed String: " << StringUtil::Reverse("I like computers!");
}
当它运行时,显示
错误5错误LNK2019:未解析的外部符号“public:static class std :: basic_string,class std :: allocator&gt; __cdecl StringUtil :: Reverse(class std :: basic_string,class std :: allocator&gt;)”( ?Reverse @ StringUtil @@ SA?AV?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ V23 @@ Z)在函数“void __cdecl a10_StringUtil”中引用)“(?a10_StringUtil @@ YAXXZ)H:\ Visual Studio 2010 \ Projects \面向对象的C ++ \面向对象的C ++ \面向对象的C ++。obj面向对象的C ++
和
错误6错误LNK1120:1个未解析的外部H:\ Visual Studio 2010 \ Projects \面向对象的C ++ \ Debug \面向对象的C ++。exe 1 1面向对象的C ++
我觉得这是一个非常简单的问题,但我习惯用Java编程。我正在努力教自己如何用c ++编码,因此我的问题。
答案 0 :(得分:4)
首先,在C ++中,我们没有静态类:
#pragma once
#include <string>
#include "stdafx.h"
#include <iostream>
using namespace std;
class StringUtil
{
public:
static string Reverse(string);
// bool Palindrome(string);
// string PigLatin(string);
// string ShortHand(string);
private:
// string CleanUp(string);
};
其次,您忘记了类名StringUtil (所有者):
string StringUtil::Reverse(string phrase)
{
string nphrase = "";
for(int i = phrase.length() - 1; i >= 0; i--)
{
nphrase += phrase[i];
}
return nphrase;
}
我希望这可以帮助你:)
答案 1 :(得分:0)
static string Reverse(string phrase)
{
...
}
没有定义类的static
成员函数。它定义了一个文件范围的非成员函数。你需要使用:
string StringUtil::Reverse(string phrase)
{
...
}