uppercase()函数是我的类的一部分:
class MyString {
public:
MyString();
MyString(char cstring[]);
void uppercase();
private
};
大写的实现尚未完成,但看起来像这样:
void MyString::uppercase()
{
cout << "need to implement";
}
当我调用该函数时,它看起来像这样:
//Output streaming Operator Overload
ostream& operator<<(ostream& os, const MyString& string)
{
if (MyString::printAsUppercase == true)
uppercase();
else
os << string.data;
cout << "(" << string.length << ")";
return os;
}
当我尝试编译代码时,收到以下错误:
'std::uppercase': function does not take 0 arguments
我真的不明白这一点,因为我宣布原型不接受任何论证,并在实施中继续执行。该函数不应该采用任何参数。为什么会这样?
答案 0 :(得分:1)
std::uppercase是标准库中的合法I / O流对象。因为您在std命名空间中编码,所以编译器无法判断您是使用函数还是库对象。一个简单的解决方案是更改函数的名称或指定类MyClass :: uppercase(...)。更好的解决方案是将代码包装在您自己的命名空间中,或者使用声明“using namespace std;”避免在std命名空间中编码。在我看来,每次使用时都更明确地指定std命名空间。例如,而不是写“using namespace std;”然后“cout&lt;&lt; ...”只写“std :: cout&lt;&lt; ...”
答案 1 :(得分:0)
您需要指定要调用大写方法。 错误表明您要调用“std :: uppercase”&lt;&lt; std ::你需要在课堂上调用你的方法。
评论编辑: FrançoisAndrieux提到这可能是一个问题,因为你使用“using namespace std;” 因此,将在std中搜索所有函数调用。 (并且他是正确的:))
答案 2 :(得分:0)
我希望以下代码可以帮助理解其他用户指出的要点。它编译,但......绝对不是最佳:
main.cpp
#include <iostream>
#include "MyString.h"
int main(int argc, char** argv)
{
// Needs arguments from command line!!!
MyString teststring(argv[1]);
std::cout << teststring << std::endl;
return 0;
}
MyString.h
class MyString {
public:
MyString();
MyString(char *cText);
void myUpperCase();
int myStringLenght();
protected:
bool printAsUppercase;
char *data;
friend std::ostream& operator<<(std::ostream& os,
MyString mystring);
};
MyString.cpp
#include <cstdlib>
#include <cstring>
#include <iostream>
#include "MyString.h"
MyString::MyString(char *cText)
{
data = (char *)std::malloc(strlen(cText));
std::strcpy(data, cText);
}
void MyString::myUpperCase()
{
std::cout << "not yet implemented";
}
int MyString::myStringLenght()
{
return int(strlen(data));
}
std::ostream& operator<<(std::ostream& os,
MyString mystring)
{
// to be deleted - only for testing
mystring.printAsUppercase = true;
if (mystring.printAsUppercase == true)
mystring.myUpperCase();
else
os << mystring.data;
std::cout << "(" << mystring.myStringLenght() << ")";
return os;
}