0

.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 ファイルの空のコンストラクターをコメントアウトしようとしました。セミコロンをいじってみました。「 string url' ですが、何も機能していないようです.StackOverflow で同様の問題を調べてみましたが、3 つの解決策はすべて何もしません.どうすれば修正できますか?

編集:もともと、私は持っていました

CountedLocations::CountedLocations(std::string url, int counter) 

それ以外の

CountedLocations(std::string url, int counter)

しかし、それにより、「メンバー 'CountedLocations' [-fpermissive] の追加修飾 'CountedLocations::'」というエラーが発生したため、使用しないことにしました。

4

3 に答える 3

2

ファイルが定義について認識#include <string>できるように、.cpp から .h ファイルに移動する必要があります。1 つの cpp を使用する場合、インクルードの順序を切り替えることができますが、他の場所でも使用する予定がある場合は、ヘッダー (countedLocs.h) に配置することをお勧めします。countedLocs.hstd::string

#include <iostream>
#include <string>
#include "countedLocs.h"
于 2013-11-13T18:07:36.840 に答える
2

これが本当にすべてのコードである場合、構造体が定義される前に std::string (つまり #include ) の定義がありません。

.h ファイルは、単独でコンパイルできる必要があります。#include を .h ファイルに入れます (また、いくつかのインクルード ガードも!)

于 2013-11-13T18:10:03.353 に答える
1

cpp ファイル (ヘッダー ファイルではない) には、次のものが必要です。

CountedLocations::CountedLocations(std::string url, int counter)
{

}

これではない:

CountedLocations(std::string url, int counter)
{

}

しかし、それによって「メンバー 'CountedLocations' [-fpermissive] の追加修飾 'CountedLocations::'」というエラーが発生したため、使用しないことにしました。

これは、クラス本体のコンストラクターの宣言に修飾を付けた場合に発生するエラーです。

于 2013-11-13T18:18:08.067 に答える