c++ - 编译器错误和 String 类无法识别方法

标签 c++ class compilation

我创建了自己的字符串类,但出于某种原因,智能感知没有选择我明确定义并尝试使用的方法。智能感知不仅没有选择这些方法,而且在尝试编译时出现构建错误。

intellisense 获取的唯一方法是 Display()Test()GetString()String 类中找不到,说 There is no member Test()当我尝试编译时没有成员 GetString

string.cpp

#include "String.h"
#include <iostream>

using std::cout;
using std::endl;

String::String() :m_SingleChar('\0'), m_CString(nullptr)
{ }

String::String(char Character) : m_SingleChar(Character)
{ }

String::String(char * CharacterString)
{
    if (CharacterString != nullptr)
    {
        m_CString = new char [strlen(CharacterString) + 1];
        strcpy (m_CString, CharacterString);
    }
}

String::~String()
{
    delete [] m_CString;
}

String::String(const String & copy) : m_SingleChar(copy.m_SingleChar)
{
    if (copy.m_CString != nullptr)
    {
        m_CString = new char [strlen(copy.m_CString) + 1];
        strcpy (m_CString, copy.m_CString);
    }
}

String & String::operator = (const String & rhs)
{
    if (this != &rhs)
    {
        delete [] m_CString;
        if(rhs.m_CString == nullptr)
            m_CString = nullptr;
        else
        {
            m_CString = new char[strlen(rhs.m_CString) + 1];
            strcpy (m_CString, rhs.m_CString);
        }
        m_SingleChar = rhs.m_SingleChar;
    }
    return *this;
}

char * String::GetString(String m_CString)
{
    char * Cstring = m_CString.m_CString;
    return Cstring;
}

void String::Test()
{
}

void String::Display()
{
    cout << "Single character: " << m_SingleChar << endl;
    cout << "C String:  " << m_CString << endl;
}

string.h

#ifndef STRING_H
#define STRING_H


class String
{
public:
    String();
    String(char Character);
    String(char * CharacterString);
    ~String();
    String(const String & copy);
    String & operator = (const String & rhs);
    char * GetString (String CString);
    void Test();
    void Display();

private:
    char m_SingleChar;
    char * m_CString;
};

#endif

确切的错误发生在这一行,错误信息是:

Error   1   error C2039: 'Test' : is not a member of 'String'       
23  1   Potion Class     2

...

int * Potion::GetMoney (int * coins)
{
    String something;
    something.Test();  //Error occurs here

    return coins;
}

有谁知道为什么这个类不能编译?

有谁知道为什么编译器说 void Test()char * GetString 没有将它们识别为我的字符串类的成员?

最佳答案

我在 Microsoft Visual C++ 2005 上编译了 string.h 和 string.cpp,它没有给我您指定的错误。

我用 NULL 替换了 nullptr 因为我没有使用 C++11。此外,通过将 strcpy 替换为 strcpy_s 并编译。

关于c++ - 编译器错误和 String 类无法识别方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21177757/

相关文章:

C++ 11 Boost 1.65 recursive_directory_iterator 给出段错误

c++ - #include .h 和只声明 A 类之间的区别;在 C++ 中

c++ - 我正在尝试从类中的 boolean 值返回一个字符串,该字符串一直返回 true

c++ - Visual C++ 库目录等效命令行

c++ - 如何追踪 undefined symbol

gcc - 配置 : error: Building GCC requires GMP 4. 2+、MPFR 2.3.1+ 和 MPC 0.8.0+

c++ - 对齐说明符 : on the type/on the member data

c++ - Qt3D画线消耗太多内存

c++ - 复制构造函数,为什么在按值函数返回

python - 使用 __eq__ 在 Python 中修改类