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