调用静态方法,获取错误:LNK2019

时间:2017-05-09 16:17:37

标签: c++ static

我在制作一个只有静态方法的字符串实用程序类时遇到了一些麻烦。每当我使用一个调用类在我的字符串实用程序类中使用静态方法时,它会编译一个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 ++编码,因此我的问题。

2 个答案:

答案 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)
{
   ...
}