Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
标识符未定义 我用VS2012 Express编写C++中的以下代码。p> void ac_search( uint num_patterns, uint pattern_length, const char *patterns, uint num_records, uint record_length, const char *records, int *matches, Node* trie) { // Irrelevant code omitted. } vector<int> ac_benchmark_search( uint num_patterns, uint pattern_length, const char *patterns, uint num_records, uint record_length, const char *records, double &time) { // Prepare the container for the results vector<int> matches(num_records * num_patterns); Trie T; Node* trie = T.addWord(records, num_records, record_length); // error line ac_search(num_patterns, pattern_length, patterns, num_records, record_length, records, matches.data(), trie); // Irrelevant code omitted. return matches; }_C++_Visual C++_Visual Studio 2012 - Fatal编程技术网

标识符未定义 我用VS2012 Express编写C++中的以下代码。p> void ac_search( uint num_patterns, uint pattern_length, const char *patterns, uint num_records, uint record_length, const char *records, int *matches, Node* trie) { // Irrelevant code omitted. } vector<int> ac_benchmark_search( uint num_patterns, uint pattern_length, const char *patterns, uint num_records, uint record_length, const char *records, double &time) { // Prepare the container for the results vector<int> matches(num_records * num_patterns); Trie T; Node* trie = T.addWord(records, num_records, record_length); // error line ac_search(num_patterns, pattern_length, patterns, num_records, record_length, records, matches.data(), trie); // Irrelevant code omitted. return matches; }

标识符未定义 我用VS2012 Express编写C++中的以下代码。p> void ac_search( uint num_patterns, uint pattern_length, const char *patterns, uint num_records, uint record_length, const char *records, int *matches, Node* trie) { // Irrelevant code omitted. } vector<int> ac_benchmark_search( uint num_patterns, uint pattern_length, const char *patterns, uint num_records, uint record_length, const char *records, double &time) { // Prepare the container for the results vector<int> matches(num_records * num_patterns); Trie T; Node* trie = T.addWord(records, num_records, record_length); // error line ac_search(num_patterns, pattern_length, patterns, num_records, record_length, records, matches.data(), trie); // Irrelevant code omitted. return matches; },c++,visual-c++,visual-studio-2012,C++,Visual C++,Visual Studio 2012,更新2 我认为错误与属于类Trie的函数addWord有关。当我注释掉这个函数时,我再也没有得到这个错误了 Node* Trie::addWord(const char *records, uint num_records, uint record_length) { // Loop over all records for (uint record_number = 0; record_number < num_records; ++record_number)

更新2

我认为错误与属于类
Trie
的函数
addWord
有关。当我注释掉这个函数时,我再也没有得到这个错误了

Node* Trie::addWord(const char *records, uint num_records, uint record_length)
{

    // Loop over all records
    for (uint record_number = 0; record_number < num_records; ++record_number)
    {
        const char *ptr_record = &records[record_number * record_length];
        string s = ptr_record;
        Node* current = root;
        if ( s.length() == 0 )
        {
            current->setWordMarker(); // an empty word
            return;
        }

        for ( int i = 0; i < s.length(); i++ )
        {        
            Node* child = current->findChild(s[i]);
            if ( child != NULL )
            {
                current = child;
            }
                else
                {
                    Node* tmp = new Node();
                    tmp->setContent(s[i]);
                    current->appendChild(tmp);
                    current = tmp;
                }
                if ( i == s.length() - 1 )
                    current->setWordMarker();
        }
        return current;
    }  

void ac_search(
        uint num_patterns, uint pattern_length, const char *patterns, 
        uint num_records, uint record_length, const char *records,
        int *matches, Node* trie) {

      // Irrelevant code omitted.
    }    

    vector<int> ac_benchmark_search(
        uint num_patterns, uint pattern_length,
        const char *patterns, uint num_records, uint record_length,
        const char *records, double &time) {

      // Prepare the container for the results
      vector<int> matches(num_records * num_patterns);
      Trie T;
      Node* trie = T.addWord(records, num_records, record_length);

      // error line
      ac_search(num_patterns, pattern_length, patterns, num_records,
                record_length, records, matches.data(), trie);    

      // Irrelevant code omitted.    
      return matches;
    }
Node*Trie::addWord(const char*records、uint num\u records、uint record\u length)
{
//循环所有记录
对于(uint记录编号=0;记录编号<记录编号;++记录编号)
{
常量字符*ptr_记录=&记录[记录编号*记录长度];
字符串s=ptr_记录;
节点*当前=根;
如果(s.length()==0)
{
当前->setWordMarker();//一个空单词
返回;
}
对于(int i=0;ifindChild(s[i]);
if(child!=NULL)
{
当前=儿童;
}
其他的
{
Node*tmp=新节点();
tmp->setContent(s[i]);
当前->附加子项(tmp);
电流=tmp;
}
如果(i==s.length()-1)
当前->设置文字标记();
}
回流;
}  
无效ac_搜索(
uint num_patterns,uint pattern_length,const char*patterns,
uint num_记录,uint记录长度,常量字符*记录,
int*匹配,节点*trie){
//忽略不相关的代码。
}    
向量ac_基准搜索(
uint num_图案,uint图案长度,
常量字符*模式,uint num_记录,uint记录长度,
常量字符*记录,双精度和时间){
//为结果准备容器
向量匹配(num_记录*num_模式);
特里特;
Node*trie=T.addWord(记录、记录数、记录长度);
//误差线
ac_搜索(num_模式、模式长度、模式、num_记录、,
记录长度,记录,匹配.data(),trie);
//忽略不相关的代码。
返回比赛;
}

是否缺少函数声明

void ac_search(uint num_patterns, uint pattern_length, const char *patterns, 
               uint num_records, uint record_length, const char *records, int *matches, Node* trie);

在实现ac_benchmark_search之前添加它。

从更新2开始,在缩小问题范围后,我们可以很容易地发现函数
addWord
末尾缺少一个大括号。编译器永远不会显式识别这样的语法错误。相反,它会假设缺少的函数定义位于某个其他对象文件中。链接器将对此进行投诉,因此将直接归入广义错误短语之一,即
标识符未定义
。这是合理的,因为根据当前语法,下一个函数定义(在本例中为
ac_search
)将包含在
addWord
范围内。因此,它不再是一个全局函数。这就是为什么编译器将不会在
addWord
之外看到此函数,并将抛出此错误消息,说明没有此函数。有关编译器和链接器的详细信息,请参阅使用命名空间std;

检查
ac\u search
的声明是否早于
ac\u benchmark\u search
的定义,是否可以尝试将
ac\u search
设置为静态?或者将
ac\u search
作为头文件的外部。@SergeyKolotienko是的,代码按原样引用,顺序尝试删除i相关代码,如我在编辑中所示。请同时显示足够的代码,以生成一个完整的、独立的、应该编译的示例。这样做的目的是获得显示问题的最小示例;这样您就可以减少调试工作量。AddWord似乎缺少一个右括号。如果函数在另一个是实现的。“如果”是重要的部分。看看他的代码,它是在ac_搜索之前实现的,除非他以错误的方式发布。也许他只是在这里粘贴了这两个函数(按正确的顺序)。@user1764961我发布的顺序与我的代码实现相同
void ac_search(uint num_patterns, uint pattern_length, const char *patterns, 
               uint num_records, uint record_length, const char *records, int *matches, Node* trie);