make file抛出两个错误

时间:2014-10-23 10:04:11

标签: c++ string makefile

您好我已经创建了四个文件fn.cpp header.h,main.cpp和makefile 我得到两个错误PLZ帮助解决它。

  1. fn.cpp:1错误:字符串未在此范围内声明?为什么呢?

  2. fn.cpp:2错误:预期','或';'在'{'令牌之前?

  3. header.h:

    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    using namespace std;
    int fn(string);
    

    main.cpp中:

    #include "header.h"
    string s= " hello world";
    int main()
    {
        fn(s):
    }
    

    fn.cpp:

    int fn(string ss)
    {
        printf("%s",ss);
    }
    

    生成文件:

    all:hello
    hello:main.o fn.o
    tab   g++ main.o fn.o-o hello
    main.o:main.cpp
    tab  g++ -c main.cpp
    fn.o:fn.cpp
    tab g++ -c fn.cpp
    

2 个答案:

答案 0 :(得分:1)

std::string类在<string>标头中定义。包括而不是C库的<string.h>标题。

此外,您需要在两个源文件中包含"header.h"

最后,您无法将string对象直接传递给printf;这是一个对C ++类一无所知的C函数。使用C ++ I / O:

std::cout << ss;

或使用C风格的字符串:

printf("%s", ss.c_str());

答案 1 :(得分:0)

很多小的&#34; c ++风格&#34;问题:)

使用标题#include <string>并尽可能避免printf,更好地使用cout

c ++爱好者会更喜欢这个:

fn.h

#include<string>
void fn(const std::string&);

fn.cpp

#include <stdio.h>
#include "fn.h"

void fn(const std::string& ss)
{
    printf(ss.c_str());
}

HELLO.CPP

#include "fn.h"

std::string s = " hello world";

int main()
{
    fn(s);
}

生成文件

all: hello

hello: hello.cpp fn.o