我是C ++初学者。我有一个班级,当我尝试编译它时说它缺少'main'。
创建此类的实例并访问其方法需要做什么?
#include <string>
#include <iostream>
using namespace std;
class Account
{
string name;
double balance;
public:
Account(string n);
Account(string n, double initial_balance);
string get_name() const;
double get_balance() const;
void deposit(double amount);
void widthdraw(double amount);
};
修改
我在哪里放主法?
我尝试将其放在不同的文件中,如下所示
#include <Account>
int main(){
Account:: Account(string n) : name(n), balance(0){}
return 0 ;
}
但是这会出错,说目录中没有Account。我猜这是因为它没有编译
修改
两个文件都在同一目录中
account_main.cc
#include<string>
#include <iostream>
#include "Account.cc"
Account:: Account(string n) : name(n), balance(0){}
int main()
{
Account account("Account Name"); // A variable called "account"
account.deposit(100.00); // Calls the deposit() function on account
return 0 ;
}
Account.cc
#include<string>
#include <iostream>
using namespace std;
class Account
{
string name;
double balance;
public:
Account(string n);
Account(string n, double initial_balance);
string get_name() const;
double get_balance() const;
void deposit(double amount);
void widthdraw(double amount);
};
答案 0 :(得分:6)
所有C ++程序都需要所谓的入口点。 main()
函数始终是标准C ++程序的入口点。您需要提供main()
函数,否则链接器会抱怨。您可以通过以下两种方式之一编写main()
函数:
int main()
{
return 0;
}
或者,如果您期望命令行参数:
int main(int argc, char ** argv)
{
return 0;
}
请注意,void main()
在C ++中无效。另请注意,return
语句对于main()
函数并不是绝对必要的,但为了保持一致,您应该明确地编写一个语句。
C ++标准3.6.1主要功能[basic.start.main]
5. main中的return语句具有离开main函数的效果(销毁具有自动存储持续时间的任何对象)和 以返回值作为参数调用exit。如果控制到达 main的结尾没有遇到return语句,效果是 执行
return 0;
要回答有关最新修改的问题:
#include <Account>
int main(){
Account:: Account(string n) : name(n), balance(0){}
return 0 ;
}
main()
的形式是正确的,但这不是您提供类成员定义的方式。构造函数需要在main函数之外。
#include <Account>
// Outside of main()
Account::Account(string n) : name(n), balance(0)
{
}
int main()
{
return 0 ;
}
要创建Account
的实例,请声明一个变量并传递所有必需的构造函数参数,如下所示:
int main()
{
Account account("Account Name"); // A variable called "account"
account.deposit(100.00); // Calls the deposit() function on account
// Make sure you provide a function
// definition for Account::deposit().
return 0;
}
另外,请检查class Account
所在的确切文件路径。如果Account
类位于名为Account.h
的文件中,并且与包含main()
函数的文件位于同一文件夹中,则需要使用#include "Account.h"
而不是{#include <Account>
1}}在该文件中。例如:
#include "Account.h" // Note .h and quotes
Account::Account(string n) : name(n), balance(0)
{
}
int main()
{
// ...
return 0;
}
这实际上是C ++编程语言的一个相当基本的方面。你肯定有一本书涵盖了这个吗?事实上,main()
函数和#include
语句通常是您在使用C ++编程时学到的第一件事。我强烈建议您选择a good C++ book并仔细阅读并进行练习。
答案 1 :(得分:1)
对于您的最新修改:not Account in the directory
试试这个:
#include "Account.h" //quotes, and .h
Account:: Account(string n) //this must be outside of main, it's its own function
: name(n), balance(0) //I put these on three seperate lines but
{} //that's a personal choice
int main(){ //this is what the code should do when it starts
Account person1("George"); //create a Account called person1 with the name George
cout << person1.get_name(); //c-output person1's name.
return 0 ; //return success (success=0)
}
答案 2 :(得分:1)
正如已经指出的那样,你需要一本像样的书。要回答您的问题,您应该了解以下内容: 类通常在.h文件中定义,并在.cpp或.cc文件中实现。您应该有三个文件:Account.h,Account.cc和main.cc.您只编译.cc文件,并且.h文件包含在您需要了解该类的代码部分中(例如,当您实际使用该类时)。如果您正在使用g ++(我认为是linux,unix或mingw),您可以使用以下命令编译程序:g ++ main.cc Account.cc -o program_name
main.cc:
#include <iostream>
using namespace std;
#include "Account.h"
int main() {
Account a("first account");
cout << a.get_balance() << endl;
a.deposit(100.0);
cout << a.get_balance() << endl;
return 0;
}
您的Account.h文件应如下所示:
#include<string>
//#include <iostream> -- not needed here
// using namespace std; -- don't use 'using' in header files
class Account
{
std::string name;
double balance;
public:
Account(std::string n);
Account(std::string n, double initial_balance);
std::string get_name() const;
double get_balance() const;
void deposit(double amount);
void widthdraw(double amount);
};
最后你的Account.cc文件应该实现该类。
#include "Account.h"
using namespace std;
Account::Account(string n) : name(n), balance(0.0) {}
Account::Account(string n, double initial_balance) :
name(n), balance(initial_balance) {}
string Account::get_name() const {
return name;
}
double Account::get_balance() const {
return balance;
}
void Account::deposit(double amount) {
balance += amount;
}
void Account::widthdraw(double amount) {
balance -= amount; // generously allow overdraft...
}
希望有所帮助。
罗马