繁体   English   中英

函数不接受 0 个参数

[英]Function does not take 0 Arguments

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

我真的不明白这一点,因为我声明原型不接受任何参数,并在实现中跟进。 该函数不应该接受任何参数。 为什么会发生这种情况?

std::uppercase是标准库中合法的 I/O 流对象。 因为您在 std 命名空间中编码,所以编译器无法判断您使用的是函数还是库对象。 一种简单的解决方案是更改函数名称或指定类 MyClass::uppercase(...)。 更好的解决方案是将您的代码包装在您自己的命名空间中,或者避免在 std 命名空间中使用声明“using namespace std;”进行编码。 在我看来,每次使用时都指定 std 命名空间更清楚。 例如,而不是写“使用命名空间 std;” 然后 "cout << ..." 只写 "std::cout << ..."

您需要指定要调用大写方法。 错误指出您要调用“std::uppercase”<<std:: 您需要在您的类上调用您的方法。

评论编辑:François Andrieux 提到这可能是一个问题,因为您使用了“using namespace std;” 因此,所有函数调用都将在 std 中搜索。 (他说得对:))

我希望以下代码可以帮助理解其他用户指出的要点。 它可以编译,但是......绝对不是最佳的:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM