मेरे पास 2 फ़ाइलें Article13Filter.h और Article.cpp हैं जिनमें मैं .h फ़ाइल में स्थित वर्ग के सभी घोषित कार्यों को परिभाषित करता हूं। हालांकि, वह वीएस कंपाइलर मुझे बताता है कि Article13Filter.h फ़ाइल में Article13Filter शब्द जो मैं प्रत्येक फ़ंक्शन की परिभाषा से पहले लिखता हूं (यह इंगित करने के लिए कि यह उस वर्ग से संबंधित है) एक वर्ग या नामस्थान नाम नहीं है, भले ही include निर्देशों को उनकी संगत फाइलों में सही ढंग से शामिल किया गया हो? मैं पूछना चाहता हूं कि ऐसा क्यों है?

Article13Filter.h फ़ाइल:

#ifndef ARTICLE_13_FILTER_H
#define ARTICLE_13_FILTER_H
#include <string>
#include <vector>
#include <set>
#include "Article.cpp"
class Article13Filter {
private:
    std::set<std::string> copyrighted;
    std::vector<std::string> blocked;
public:
    Article13Filter(std::set<std::string> copyrighted);
    bool blockIfCopyrighted(std::string s);
    bool isCopyrighted(std::string s);
    std::vector<std::string> getBlocked();
};
#endif // !ARTICLE_13_FILTER_H

Article.सीपीपी फ़ाइल:

#include <iostream>
#include <string>
#include <set>
#include "Article13Filter.h"
using namespace std;
bool Article13Filter::isCopyrighted(string s) {
    for (set<string>::iterator it = copyrighted.begin(); it != copyrighted.end(); it++) {
        if (*it == s) {
            return true;
        }
        return false;
    }
}
bool Article13Filter::blockIfCopyrighted(string s) {
    if (isCopyrighted(s)) {
        return false;
    }
    return true;
}
vector<string> Article13Filter::getBlocked() {
    return blocked;
}
1
user10602498 4 नवम्बर 2018, 07:52

1 उत्तर

सबसे बढ़िया उत्तर

#include "Article.cpp" को Article13Filter.h से हटा दें। सामान्य तौर पर, आप .cpp फ़ाइलों को संकलित और लिंक करना चाहते हैं और .h और .hpp फ़ाइलें शामिल करना चाहते हैं।

जब आप कोई फ़ाइल शामिल करते हैं तो यह प्रभावी रूप से फ़ाइल सहित कॉपी-पेस्ट हो जाती है। अंततः संकलित की जा रही फ़ाइल कुछ इस तरह दिखती है

#include <iostream>
#include <string>
#include <set>

#include <string>
#include <vector>
#include <set>
#include <iostream>
#include <string>
#include <set>


using namespace std;
bool Article13Filter::isCopyrighted(string s) {
    for (set<string>::iterator it = copyrighted.begin(); it != copyrighted.end(); it++) {
        if (*it == s) {
            return true;
        }
        return false;
    }
}
bool Article13Filter::blockIfCopyrighted(string s) {
    if (isCopyrighted(s)) {
        return false;
    }
    return true;
}
vector<string> Article13Filter::getBlocked() {
    return blocked;
}

class Article13Filter {
private:
    std::set<std::string> copyrighted;
    std::vector<std::string> blocked;
public:
    Article13Filter(std::set<std::string> copyrighted);
    bool blockIfCopyrighted(std::string s);
    bool isCopyrighted(std::string s);
    std::vector<std::string> getBlocked();
};


using namespace std;
bool Article13Filter::isCopyrighted(string s) {
    for (set<string>::iterator it = copyrighted.begin(); it != copyrighted.end(); it++) {
        if (*it == s) {
            return true;
        }
        return false;
    }
}
bool Article13Filter::blockIfCopyrighted(string s) {
    if (isCopyrighted(s)) {
        return false;
    }
    return true;
}
vector<string> Article13Filter::getBlocked() {
    return blocked;
}

आपको जो त्रुटियां मिल रही हैं, वे इसलिए हैं क्योंकि cpp फ़ाइल को .h फ़ाइल में शामिल करके, विशेष रूप से वर्ग परिभाषा से पहले, क्लास परिभाषित होने से पहले कंपाइलर द्वारा क्लास विधियों की घोषणा देखी जाती है।

2
user4581301 4 नवम्बर 2018, 05:05