在.h文件中,我有以下代码。
#ifndef COUNTEDLOCATIONS
#define COUNTEDLOCATIONS
#include <iostream>
#include <string>
struct CountedLocations {
CountedLocations();
CountedLocations(std::string url, int counter);
std::string url;
int count;
//below is code for a later portion of the project
bool operator== (const CountedLocations&) const;
bool operator< (const CountedLocations&) const;
};
在包含.h文件的.cpp文件中,我的代码是
#include "countedLocs.h"
#include <iostream>
#include <string>
using namespace std;
CountedLocations(std::string url, int counter)
{
}
我在'url'之前得到错误“Expected')'。我已经尝试在.h文件中注释掉空构造函数,我已经尝试过使用分号,我已经尝试删除std :: that前缀'string url',但似乎没有任何效果。我尝试在StackOverflow上查看类似的问题,但所有三个解决方案都没有做任何事情。我该如何解决这个问题?
编辑:最初,我有CountedLocations::CountedLocations(std::string url, int counter)
而不是
CountedLocations(std::string url, int counter)
但是这给了我在成员'CountedLocations'[-fpermissive]上的错误“额外资格'CountedLocations ::',所以我选择不使用它。
答案 0 :(得分:2)
移动需要{。1}从.cpp到.h文件,以便文件#include <string>
知道countedLocs.h
定义。在你使用一个cpp的情况下,你可以切换包含的顺序,但如果你计划在其他地方也使用它,那么最好将它放在那里的头文件中(countsLocs.h)。
std::string
答案 1 :(得分:2)
如果这确实是你的所有代码,那么在定义struct之前你没有std :: string的定义(即#include)。
.h文件应该可以自己编译。将#include放在.h文件中(有些还包括警卫!)
答案 2 :(得分:1)
在你的cpp文件(不是你的头文件)中,你应该这样:
CountedLocations::CountedLocations(std::string url, int counter)
{
}
不是这个:
CountedLocations(std::string url, int counter)
{
}
但这给了我错误“额外资格'CountedLocations ::' 在成员'CountedLocations'[-fpermissive],所以我选择不使用 它
如果你在类体中对构造函数的声明进行了限定,那就是你会得到的错误。