我在使用 this-> 时遇到问题,因为它说它只能在非静态成员函数中引用。我也对 variable = null 有疑问,因为它说“=”是不明确的。
//Employee.h
using namespace std;
class Employee {
private:
public:
string FirstName;
string LastName;
string DisplayFirstName;
string DisplayLastName;
string DisplaySalary;
string SearchName;
float Salary;
Employee( string FirstName, string LastName, float Salary )
{
setFirstName(FirstName);
setLastName(LastName);
setSalary(Salary);
}
string setFirstName(string FirstName);
string setLastName(string LastName);
float setSalary(float Salary);
void ReadFile(ifstream& MyinFile);
string EmployeeSearch(string LastName[], string SearchName);
void DisplayEmployee (string DisplayFirstName, string DisplayLastName, string DisplaySalary);
Employee();
};
//Employee.cpp
#include <iostream>
#include <fstream>
#include <string>
#include "Employee.h"
using namespace std;
string setFirstName(string FirstName)
{
**FirstName = NULL;** //ambiguous error
}
string setLastName(string LastName)
{
**LastName = NULL;** //ambiguous error
}
float setSalary(float Salary)
{
Salary = 0.0;
}
void ReadFile(ifstream& MyinFile)
{
char exit_char;
int MaxSize;
int count = 0;
MyinFile.open("employee.dat");
if (!MyinFile)
{ //no
cout << "Can't open input file." << endl; //Tests the right file.
char exit_char; //End Program
cout << "Press any key to exit" << endl;
cin >> exit_char;
}
for(count = 0; count < MaxSize; count++)
{
MyinFile >> **this->LastName**;
MyinFile >> **this->FirstName**;
MyinFile >> **this->Salary**; //error
}
MyinFile.close();
}
string EmployeeSearch(string LastName[], string FirstName[], float Salary, string SearchName, string DisplayFirstName, string DisplayLastName, string DisplaySalary)
{
cout << "Please enter the name of the employee you would like to search." << endl;
cin >> SearchName;
for (int i = 0; i < 10; i++ )
{
if (LastName[i] == SearchName)
{
DisplayFirstName = FirstName[i];
DisplayLastName = LastName[i];
DisplaySalary = **Salary[i];** //error
}
else
cout << "Could not find employee." << endl;
}
};
void DisplayEmployee (string DisplayFirstName, string DisplayLastName, string DisplaySalary)
{
cout << DisplayFirstName << " ";
cout << DisplayLastName << " ";
cout << DisplaySalary << endl;
};
//Main.cpp
#include <iostream>
#include <fstream>
#include <string>
#include "Employee.h"
using namespace std;
const int MaxSize = 100;
int main()
{
char Redo; //Input a character to redo the program
ifstream MyinFile;
cout << "Your Salary Machine\n\n";
Employee Employee;
Employee.ReadFile(MyinFile); //undeclared identifier error
do
{
Employee.EmployeeSearch(**LastName[], SearchName**); //undeclared identifier error
Employee.DisplayEmployee(**DisplayFirstName,DisplayLastName,DisplaySalary**); //undeclared identifier error
//Asks user if they want redo the program
cout << "Would you like to redo the program?\n";
cout << "Please enter Y or N: \n";
cin >> Redo;
}while(Redo == 'Y' || Redo == 'y');
return 0;
}
编写该程序是为了读取一个文件,该文件包含名字和姓氏,然后是薪水 然后能够输入文件中任何人的姓氏,它将显示姓名和薪水,然后重复。我假设使用构造函数将名字和姓氏初始化为 NULL,然后将薪水初始化为 0.0。我还应该使用 get 和 set 成员函数。
错误如下:
Main.cpp
\\psf\home\documents\visual studio 2010\projects\csci112\lab3project\lab3project\main.cpp(31): error C2059: syntax error : ']'
Employee.cpp
\\psf\home\documents\visual studio 2010\projects\csci112\lab3project\lab3project\employee.cpp(12): error C2593: 'operator =' is ambiguous
c:\program files\microsoft visual studio 10.0\vc\include\xstring(772): could be 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(_Elem)'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
c:\program files\microsoft visual studio 10.0\vc\include\xstring(767): or 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(const _Elem *)'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
while trying to match the argument list '(std::string, int)'
\\psf\home\documents\visual studio 2010\projects\csci112\lab3project\lab3project\employee.cpp(16): error C2593: 'operator =' is ambiguous
c:\program files\microsoft visual studio 10.0\vc\include\xstring(772): could be 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(_Elem)'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
c:\program files\microsoft visual studio 10.0\vc\include\xstring(767): or 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(const _Elem *)'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
while trying to match the argument list '(std::string, int)'
\\psf\home\documents\visual studio 2010\projects\csci112\lab3project\lab3project\employee.cpp(38): error C2355: 'this' : can only be referenced inside non-static member functions
\\psf\home\documents\visual studio 2010\projects\csci112\lab3project\lab3project\employee.cpp(38): error C2227: left of '->LastName' must point to class/struct/union/generic type
\\psf\home\documents\visual studio 2010\projects\csci112\lab3project\lab3project\employee.cpp(39): error C2355: 'this' : can only be referenced inside non-static member functions
\\psf\home\documents\visual studio 2010\projects\csci112\lab3project\lab3project\employee.cpp(39): error C2227: left of '->FirstName' must point to class/struct/union/generic type
\\psf\home\documents\visual studio 2010\projects\csci112\lab3project\lab3project\employee.cpp(40): error C2355: 'this' : can only be referenced inside non-static member functions
\\psf\home\documents\visual studio 2010\projects\csci112\lab3project\lab3project\employee.cpp(40): error C2227: left of '->Salary' must point to class/struct/union/generic type
\\psf\home\documents\visual studio 2010\projects\csci112\lab3project\lab3project\employee.cpp(55): error C2109: subscript requires array or pointer type
最佳答案
成员 FirstName
是 std::string
(对象)的一个实例,因此尝试将 NULL
分配给它是没有意义的。
另请注意,要在其他地方(而不是声明的地方)定义成员函数,您必须使用
类名作为前缀:
string Employee::setFirstName(string FirstName)
{
...
}
另请注意,您的构造函数可能会简化为(使用初始化列表):
Employee (string FirstName, string LastName, float Salary)
: FirstName(FirstName), LastName(LastName), Salary(Salary) { }
关于c++ - 我在 C++ 中使用 this-> 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259561/