查找预编译的头文件时跳过#include - 在查找预编译头文件时意外结束文件

时间:2011-12-13 02:00:16

标签: c++ visual-c++

我有一些代码,但它不会编译。我无法进一步使用此示例,因为每次尝试调试时都会出现此错误。 注意:我是Java程序员,VS中的这条消息很奇怪,我找不到问题所在。有人能解释一下这个错误是什么意思吗?

这是代码:

zadatak.cpp:

// zadatak.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "String.h"
#include <iostream>
using namespace std;

void main()
{
    String s1(20),s2(20);
    cout<<"Unesi prvi string."<<endl;
    cin>>s1;
    cout<<"Unesi drugi string."<<endl;
    cin>>s2;
    ++s1;
    s2++;
    String s3(40);
    s3=s1+s2;
    cout<<"Treci string: "<<s3<<endl;
}

String.cpp:

#include "String.h"
#include <iostream>
using namespace std;
#include <string.h>

String::String(void)
:duzina(0)
{
    niz=new char[duzina];
}

String::String(int br)
:duzina(br)
{
    this->niz=new char[duzina];
}

String::~String(void)
{
    delete [] niz;
}

String::String(String& s)
:duzina(s.duzina)
{
    this->niz=new char[this->duzina];
    for(int i=0; i<this->duzina; i++)
        this->niz[i]=s.niz[i];
}

void String::nadjiPocetak(char rec[])
{
    int poc=0;
    for(int i=0; i<this->duzina; i++)
    {
        int duz=0;
        if(this->niz[i]==rec[0])
        {
            int l=strlen(rec);
            for(int j=0; j<l; j++)
                if(this->niz[i+j]==rec[j])
                    duz+=1;
        }
        if(duz==strlen(rec))
            poc=i;
    }
    if(poc==0)
        cout<<"U stringu ne postoji zadati string."<<endl;
    else
        cout<<"Pocetak je na poziciji: "<<poc+1<<endl;
}

/*void String::ucitaj()
{
    cout<<"Unesi string"<<endl;
    cin>>this->niz;
}

void String::prikazi()
{
    cout<<"String: "<<this->niz<<endl;
}*/

String& String::operator+ (String s)
{
    String *s1;
    s1=new String(duzina+s.duzina);
    strcpy(s1->niz,niz);
    strcat(s1->niz,s.niz);
    return *s1;
}

String& String::operator++ ()
{
    if(niz[0]>='a' && niz[0]<='z')
        niz[0]='A'+niz[0]-'a';
    return *this;
}

String& String::operator++ (int n)
{
    for(int i=0; i<duzina; i++)
        if(niz[i]>='a' && niz[i]<='z')
            niz[i]='A'+niz[i]-'a';
    return *this;
}

String& String::operator= (String& s)
{
    duzina=s.duzina;
    delete [] niz;
    niz=new char[duzina];
    strcpy(niz,s.niz);
    return *this;
}

istream& operator>> (istream& in, String& s)
{
    in>>s.niz;
    return in;
}

ostream& operator<< (ostream& out, String& s)
{
    out<<s.niz;
    return out;
}

STRING.H:

#pragma once
#include <iostream>
using namespace std;

class String
{
private:
    int duzina;
    char* niz;
public:
    String(void);
    String(int br);
    ~String(void);
    String(String& s);
    int vratiDuzinu() {return this->duzina;}
    void nadjiPocetak(char rec[]);
    //void ucitaj();
    //void prikazi();
    String& operator+ (String s);
    String& operator++ ();
    String& operator++ (int n);
    String& operator= (String& s);
    friend istream& operator>> (istream& in, String& s);
    friend ostream& operator<< (ostream& out, String& s);
};

Visual Studio在输出中提供的错误是:

  

1&gt; ------构建开始:项目:zadatak,配置:调试Win32 ------
  1&gt; Build build 12/13/2011 02:44:50 AM   1 GT; InitializeBuildStatus:
  1 GT;触摸“Debug \ zadatak.unsuccessfulbuild”。
  1 GT; ClCompile:
  1 GT;所有输出都是最新的   1 GT; zadatak.cpp
  1 GT; String.cpp
  1&gt; c:\ users \ ivo \ documents \ visual studio 2010 \ projects \ zadatak \ zadatak \ string.cpp(1):警告C4627:'#include“String.h”':在查找预编译头时使用跳过
  1 GT;将指令添加到'StdAfx.h'或重建预编译的头文件
  1&gt; c:\ users \ ivo \ documents \ visual studio 2010 \ projects \ zadatak \ zadatak \ string.cpp(2):警告C4627:'#include':在查找预编译头文件时跳过   1 GT;将指令添加到'StdAfx.h'或重建预编译的头文件
  1&gt; c:\ users \ ivo \ documents \ visual studio 2010 \ projects \ zadatak \ zadatak \ string.cpp(4):警告C4627:'#include':在查找预编译头文件时跳过使用
  1 GT;将指令添加到'StdAfx.h'或重建预编译的头文件
  1&gt; c:\ users \ ivo \ documents \ visual studio 2010 \ projects \ zadatak \ zadatak \ string.cpp(108):致命错误C1010:查找预编译标头时意外结束文件。你忘了在你的来源中添加'#include“StdAfx.h”'吗?   1 GT;生成代码...
  1 GT;
  1&gt; Build FAILED。
  1 GT;
  1&gt;经过时间00:00:00.41
  ==========构建:0成功,1个失败,0个最新,0个跳过==========

4 个答案:

答案 0 :(得分:19)

你想要

#include "stdafx.h"
在String.cpp文件中

,与所有.cpp文件一样。

答案 1 :(得分:14)

您使用包含precompiled headers的默认MSVC项目。我建议您在制作项目时选择“不要使用预编译的标题选项”。

答案 2 :(得分:13)

你应该添加

#include "stdafx.h"
你的String.cpp文件中的

,但是如果你使用预编译的头文件,你必须将它放在TOP上,例如:

#include "stdafx.h"
#include "String.h"
#include <iostream>
using namespace std;
#include <string.h>

广泛讨论here为什么必须先预编译标头。

编译器会忽略PCH之前的所有内容,因此PCH必须先出现。

答案 3 :(得分:1)

VS 2013&gt; Alt + F7&gt;配置属性&gt; C / C ++&gt;所有选项&gt; “SDL检查”中的清洁选项&gt;申请&gt;行。