所以我是C ++的新手,在使用多个类和头文件时遇到了一些问题。首先,这是我的代码:
主
#include "stdafx.h"
#include "Person.h"
#include <string>
int main()
{
using namespace std;
string city1 = "lund";
Person p1(city1);
getchar();
return 0;
}
地址 头
#pragma once
class Address
{
public:
string city;
Address(string const& city);
~Address();
};
地址 Cpp
#include "stdafx.h"
#include "Address.h"
#include <iostream>
using namespace std;
string city;
Address::Address(string const& city) : city(city)
{
cout << "Address created" << endl;
}
Address::~Address()
{
cout << "Address destroyed" << endl;
}
人标题
#pragma once
class Person
{
public:
Address *address;
Person(string const& city);
~Person();
};
人 cpp
#include "stdafx.h"
#include "Address.h"
#include "Person.h"
#include <iostream>
#include <string>
using namespace std;
Address *address;
Person::Person(string const& city)
{
address = new Address(city);
cout << "Person created" << endl;
}
Person::~Person()
{
delete address;
cout << "Person destroyed" << endl;
}
现在我很失落,因为我从这段代码中得到了16个错误!
Severity Code Description Project Path File Line Suppression State
Error C2143 syntax error: missing ';' before '*' cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\person.h 6
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\person.h 6
Error C2238 unexpected token(s) preceding ';' cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\person.h 6
Error C2061 syntax error: identifier 'string' cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\person.h 8
Error C2664 'Person::Person(const Person &)': cannot convert argument 1 from 'std::string' to 'const Person &' cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\cplusplusmodule7.cpp 15
Error C3646 'city': unknown override specifier cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\address.h 5
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\address.h 5
Error C2061 syntax error: identifier 'string' cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\address.h 7
Error C2061 syntax error: identifier 'string' cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\person.h 8
Error C2511 'Person::Person(const std::string &)': overloaded member function not found in 'Person' cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\person.cpp 11
Error C2664 'Address::Address(const Address &)': cannot convert argument 1 from 'const std::string' to 'const Address &' cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\person.cpp 12
Error C3646 'city': unknown override specifier cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\address.h 5
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\address.h 5
Error C2061 syntax error: identifier 'string' cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\address.h 7
Error C2511 'Address::Address(const std::string &)': overloaded member function not found in 'Address' cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\address.cpp 8
Error C2550 'Address::{ctor}': constructor initializer lists are only allowed on constructor definitions cplusplusModule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7 c:\users\station\documents\visual studio 2017\projects\cplusplusmodule7\cplusplusmodule7\address.cpp 9
错误包括我错过了';'在地址*address
之前,我不明白。到处找不到字符串,并且Person的构造函数不能用字符串调用。
答案 0 :(得分:4)
您需要在Person标头中包含Address.h
,否则此时编译器将不知道该类型。
或者,使用
声明Address类class Address;
第二种方法具有更快构建的优势(特别是在较大的项目中),但这意味着您无法按值使用声明的类型。它将适用于您的情况,但仅限于您不必要地使用指针。