'operator*' 不匹配(操作数类型是 'const string' {aka 'const std::__cxx11::basic_string<char>'})
no match for 'operator*' (operand type is 'const string' {aka 'const std::__cxx11::basic_string<char>'})
我正在尝试编写一个具有 class Student
的 C++ 程序。我正在尝试为 name
属性创建一个 getter,但出现此错误:
\ApplicationFile.cpp:95:9: 错误:'operator*' 不匹配(操作数类型是 'const string' {aka 'const std::__cxx11::basic_string'})
return *姓名;
知道为什么吗?
这是我到目前为止所做的:
#include <iostream>
#include <string.h>
#include <string>
#include <stdio.h>
using namespace std;
class Student
{
char *AM;
string name;
int semester, lessons;
float *passed;
public:
Student (const char *am, string n); //Constructor that I give only the serial number (AM) and the name
Student (const char *am, string n, int semester); //Constructor that I give only the serial number (AM), the name and the semester
Student (const char *am, string n, int semester, int lessons, float * passed); //Constructor that I give values to all the attributes
Student (Student &x);
void setAm (const char *am); //Set serial number
char * getAm () const; //Get serial number
void setName (string n); //Set name
string * getName () const; //Get name
};
//Only AM and Name
Student::Student(const char *am, string n)
{
int l = strlen (am);
AM = new char [l + 1];
strcpy (AM, am);
name = n;
semester = 1;
lessons = 0;
*passed = {0};
}
//Only serial number (am), name (n), semester (e)
Student::Student(const char * am, string n, int e)
{
int l = strlen (am);
AM = new char [l + 1];
strcpy (AM, am);
name = n;
semester = e;
lessons = 0;
*passed = {0};
}
//Constructor that we give values to all variables
Student::Student(const char * am, string n, int e, int perasm, float *p)
{
int l = strlen (am), i;
AM = new char [l + 1];
strcpy (AM, am);
name = n;
semester = e;
lessons = perasm;
*passed = *p;
}
void Student::setAm(const char *am)
{
delete [] AM;
int l = strlen(am);
AM = new char[l + 1];
strcpy (AM, am);
}
char * Student::getAm() const
{
return AM;
}
void Student::setName (const string s)
{
name = s;
}
string * Student::getName () const
{
return *name;
//return c;
}
int main()
{
Student Kostas("123", "Kostas");
cout << Kostas.getAm() <<endl;
Kostas.setAm("354");
cout << Kostas.getAm() <<endl;
float p[] = {5.1, 4.4, 0.0, 0.0, 0.0};
Student Giwrgos("678", "Giwrgos", 6, 5, p);
cout << Giwrgos.getName();
return 0;
}
由于错误指出运算符 *
没有 mach,操作数类型为 const string
,该操作没有意义,您正在尝试取消引用非指针变量和 return 它作为一个指针。
你可以return一个指针如果你return地址name
:
const string *Student::getName () const
{
return &name;
}
你can/shouldreturn一个参考:
const string& Student::getName () const
{
return name;
}
在学生 class 中,更改
string * getName () const; //Get name
至
string * getName (); //Get name
然后更改:
string * Student::getName () const
{
return *name;
//return c;
}
至:
string * Student::getName ()
{
return &name;
//return c;
}
name
成员声明为 string
对象,而不是指向 string
对象的 string*
指针。您的 getName()
方法被声明为 return 一个 string*
指针,但它试图使用 *
运算符将 name
对象转换为一个指针,这不管用。 std::string
没有这样的 operator*
实现,这就是您收到编译器错误的原因。但是,更重要的是,*
运算符只是用来指向 name
的错误运算符。您需要改用 &
地址运算符。
但是,由于 getName()
被声明为 const
,其隐式 this
指针是 const
,因此它访问 name
作为 const
对象。您不能 return 指向 const
对象的 指向非 const 的指针 (不使用 const_cast
,您应该避免这样做)。
没有充分的理由将 getter 变为 return 指向内部数据的 指针到非常量 .它应该 return 一个 pointer-to-const 而不是,例如:
const string* Student::getName () const;
// or: string const * Student::getName () const;
...
const string* Student::getName () const
// or: string const * Student::getName () const
{
return &name;
}
然后,当您将 string
传递给 std::cout
时,您需要取消引用该指针,例如:
cout << *(Giwrgos.getName());
但是,由于指针永远不会为空,因此最好通过 reference-to-const return name
对象而不是通过 const 指针:
const string& Student::getName () const;
// or: string const & Student::getName () const;
...
const string& Student::getName () const
// or: string const & Student::getName () const
{
return name;
}
...
cout << Giwrgos.getName();
或者,您可以 return name
对象的值代替(这将 return copy string
数据):
string Student::getName () const;
...
string Student::getName () const
{
return name;
}
...
cout << Giwrgos.getName();
我正在尝试编写一个具有 class Student
的 C++ 程序。我正在尝试为 name
属性创建一个 getter,但出现此错误:
\ApplicationFile.cpp:95:9: 错误:'operator*' 不匹配(操作数类型是 'const string' {aka 'const std::__cxx11::basic_string'}) return *姓名;
知道为什么吗?
这是我到目前为止所做的:
#include <iostream>
#include <string.h>
#include <string>
#include <stdio.h>
using namespace std;
class Student
{
char *AM;
string name;
int semester, lessons;
float *passed;
public:
Student (const char *am, string n); //Constructor that I give only the serial number (AM) and the name
Student (const char *am, string n, int semester); //Constructor that I give only the serial number (AM), the name and the semester
Student (const char *am, string n, int semester, int lessons, float * passed); //Constructor that I give values to all the attributes
Student (Student &x);
void setAm (const char *am); //Set serial number
char * getAm () const; //Get serial number
void setName (string n); //Set name
string * getName () const; //Get name
};
//Only AM and Name
Student::Student(const char *am, string n)
{
int l = strlen (am);
AM = new char [l + 1];
strcpy (AM, am);
name = n;
semester = 1;
lessons = 0;
*passed = {0};
}
//Only serial number (am), name (n), semester (e)
Student::Student(const char * am, string n, int e)
{
int l = strlen (am);
AM = new char [l + 1];
strcpy (AM, am);
name = n;
semester = e;
lessons = 0;
*passed = {0};
}
//Constructor that we give values to all variables
Student::Student(const char * am, string n, int e, int perasm, float *p)
{
int l = strlen (am), i;
AM = new char [l + 1];
strcpy (AM, am);
name = n;
semester = e;
lessons = perasm;
*passed = *p;
}
void Student::setAm(const char *am)
{
delete [] AM;
int l = strlen(am);
AM = new char[l + 1];
strcpy (AM, am);
}
char * Student::getAm() const
{
return AM;
}
void Student::setName (const string s)
{
name = s;
}
string * Student::getName () const
{
return *name;
//return c;
}
int main()
{
Student Kostas("123", "Kostas");
cout << Kostas.getAm() <<endl;
Kostas.setAm("354");
cout << Kostas.getAm() <<endl;
float p[] = {5.1, 4.4, 0.0, 0.0, 0.0};
Student Giwrgos("678", "Giwrgos", 6, 5, p);
cout << Giwrgos.getName();
return 0;
}
由于错误指出运算符 *
没有 mach,操作数类型为 const string
,该操作没有意义,您正在尝试取消引用非指针变量和 return 它作为一个指针。
你可以return一个指针如果你return地址name
:
const string *Student::getName () const
{
return &name;
}
你can/shouldreturn一个参考:
const string& Student::getName () const
{
return name;
}
在学生 class 中,更改
string * getName () const; //Get name
至
string * getName (); //Get name
然后更改:
string * Student::getName () const
{
return *name;
//return c;
}
至:
string * Student::getName ()
{
return &name;
//return c;
}
name
成员声明为 string
对象,而不是指向 string
对象的 string*
指针。您的 getName()
方法被声明为 return 一个 string*
指针,但它试图使用 *
运算符将 name
对象转换为一个指针,这不管用。 std::string
没有这样的 operator*
实现,这就是您收到编译器错误的原因。但是,更重要的是,*
运算符只是用来指向 name
的错误运算符。您需要改用 &
地址运算符。
但是,由于 getName()
被声明为 const
,其隐式 this
指针是 const
,因此它访问 name
作为 const
对象。您不能 return 指向 const
对象的 指向非 const 的指针 (不使用 const_cast
,您应该避免这样做)。
没有充分的理由将 getter 变为 return 指向内部数据的 指针到非常量 .它应该 return 一个 pointer-to-const 而不是,例如:
const string* Student::getName () const;
// or: string const * Student::getName () const;
...
const string* Student::getName () const
// or: string const * Student::getName () const
{
return &name;
}
然后,当您将 string
传递给 std::cout
时,您需要取消引用该指针,例如:
cout << *(Giwrgos.getName());
但是,由于指针永远不会为空,因此最好通过 reference-to-const return name
对象而不是通过 const 指针:
const string& Student::getName () const;
// or: string const & Student::getName () const;
...
const string& Student::getName () const
// or: string const & Student::getName () const
{
return name;
}
...
cout << Giwrgos.getName();
或者,您可以 return name
对象的值代替(这将 return copy string
数据):
string Student::getName () const;
...
string Student::getName () const
{
return name;
}
...
cout << Giwrgos.getName();